首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C 语言】指针数据类型 ( 指针类型变量 | 使用 * 操作内存 )

文章目录 一、指针类型变量 二、使用 * 操作内存 一、指针类型变量 ---- 指针 也是 变量 , 也占用内存空间 , 可以用于保存 内存地址 ; 测试 指针 变量占用的内存空间大小 : 定义一个 int...* 指针类型变量 , 使用 sizeof 函数 获取该变量的大小 ; 代码示例 : #include #include int main() { int...a = 8; // 声明指针类型变量 int *p = 888; // 声明二级指针类型变量 int **p2 = 8888; // 打印 变量 a , b...: 声明 指针 时 , * 表示声明的变量是指针变量 ; 使用指针 : 使用 指针 时 , * 表示操作 指针 指向的 内存空间 的数据 ; 操作内存 : *p 相当于 通过 指针地址 ( p 变量值...写出 ) 该内存中存储的数据 ; 代码示例 : #include #include int main() { int a = 8; // 声明指针类型变量

58210
您找到你想要的搜索结果了吗?
是的
没有找到

初识指针指针指针变量、如何理解地址、指针类型的意义、void*指针、野指针、空指针)(笔记)

四、指针类型的意义(为什么不用ptr_t p代表所有指针) 1.指针解引用的时候有多大权限 (如果一个指针代替所有的话,解引用时的字节与变量定义类型不同) 2.指针类型决定了指针向前或向后走一步有多大...:无具体指针(泛型指针) 这种类型指针可以用来接受任意类型的地址,但也有局限性, void*类型指针,局限性在于他不能直接进行指针的+-整数和解引用的运算 有什么用: 一般void*类型指针是使用在函数参数的部分...,用来接收不同数据类型的地址, 这样可以实现泛型编程的效果,使得一个函数来处理多种类型的数据 注意: void*类型指针不能直接进行解引用的操作 void* 类型指针也不能进行指针计算的操作...//pv++;//err void* 类型指针也不能加减一的操作 return 0; } 六、野指针: 指针指向的位置是不可知的(随机的,不正确的,没有明确限制的) 使用完指针后未将其置为NULL...七、空指针指针是一个特殊的数据类型,它的值定义为NULL。空指针不同于NULL的整数表示,它是一个指针变量的特殊值,表示该指针变量不指向任何有效的内存地址。

7210

【Android FFMPEG 开发】FFMPEG 方法中指针类型参数说明 ( 一维指针类型参数 | 二维指针类型参数 )

一维指针类型参数 II . 二维指针类型参数 I . 一维指针类型参数 ---- 1 ....结论 : ① 一维指针参数 : 传入一维指针 , 只能修改指向的内存的内容 ; 修改一维指针本身指向无意义 ; ② 二维指针参数 : 传入 二维指针 , 只能修改一维指针 及 以下的内容 ; 修改二维指针本身指向无意义...二维指针类型参数 ---- 1 ....的一维指针变量地址 ( 二维指针 ) , 该二维指针地址不可修改 , 但是可以修改二维指针指向的一维指针的地址 , 即在方法中重新初始化一个 AVFormatContext *结构体指针变量 , 用该二维指针指向它...结论 : 传入二维指针参数 , 二维指针本身修改无意义 , 修改二维指针指向的一维指针 , 可以影响外部的一维指针 ;

40130

【C 语言】指针数据类型 ( 指针步长 | 复杂指针阅读技巧 )

文章目录 一、指针步长 二、复杂指针阅读技巧 一、指针步长 ---- 指针 也是一种 数据类型 , 其 类型指针 指向的 内存空间 的 数据类型 ; 指针步长 : 根据 指针 指向的 内存空间 数据类型...解读 复杂的 指针声明 ( 难点 重点 | ①找出中心标识符 ②先右 后左 看 确定类型 提取 ③ 继续分析 左右看 … ) 博客章节进行分析 ; 指针 定义 复杂性来源 : 1.数组指针 : 数组指针类型为...int* , 即 int 类型指针类型 ( 3 ) 函数类型的 第二个参数是 int (*f)(int*) 也是一个函数类型指针 3...., 其返回值是 int 类型, 参数是 int* 指针类型 总结 : 指针 p 是一个指向 int(int*, int (*f)(int*)) 类型函数的指针, 函数返回值是 int...类型, 参数是 int* 指针类型 和 int (*)(int*) 函数指针 类型 指针 f 是一个指向 int(int*) 类型函数的指针, 其返回值是 int 类型, 参数是 int* 指针类型

41510

【C++】函数指针 ① ( 函数三要素 | 函数类型 | 函数指针类型 | 函数类型重命名 )

和 个数 共同决定 ; 函数类型示例 : 下面的函数类型 表示的函数 , 返回值为空 , 参数为 int 类型的 ; void (int) 3、函数指针类型 函数指针类型 是指指向函数的指针变量的类型...; 每个函数都有一个入口地址 , 这个地址是一个指针 , 指向函数的代码块在内存中的位置 ; 函数指针变量就是用来存储这个入口地址的变量 , 函数指针变量的类型需要与被调用的函数的类型匹配 , 即函数指针类型应该与被调用的函数的返回值类型和参数列表类型一致...; 函数指针类型示例 : 下面的函数指针类型 表示的函数 , 返回值为空 , 参数为 int 类型的 ; void (*)(int) 4、函数类型重命名 在 C 语言中 , 可以使用 typedef...; newfunname 是 函数重命名的新名称 ; parameterlist 是 函数的参数列表 ; 为 函数类型 和 函数指针 类型 重命名 : // void (int) 函数类型重命名, 可以使用该类型指针接收函数地址..., 可以使用该类型指针接收函数地址 typedef void func(int); // void (*)(int) 函数指针类型重命名, 可以直接使用该类型变量接收函数地址 typedef void

29550

【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组指针类型 定义数组指针 )

文章目录 总结 一、使用 数组指针类型 定义数组指针 二、完整代码示例 总结 // 首先 , 定义 数组指针类型 别名 typedef int(*ArrayPointer)[3];...// 然后 , 声明一个 数组指针类型 变量 ArrayPointer p = NULL; 一、使用 数组指针类型 定义数组指针 ---- 使用 数组指针类型 定义数组指针 , 首先 , 使用...[3] = {0}; 最后 , 声明一个 数组指针类型 变量 , 将 array2 变量地址赋值给该 数组指针类型 变量 , 指针指向的数据类型为 int[3] 数组类型的变量 array2 ;..., 数组元素是指针 (作为参考) char *array = {"12", "ab", "34"}; // 数组指针 , 使用指针变量指向数组 // 使用 数组指针类型 定义数组指针...int array2[3] = {0}; // 最后 , 声明一个 数组指针类型 变量 // 将 array2 变量地址赋值给该 数组指针类型 变量 // 指针指向的数据类型

2.9K10

【C 语言】指针数据类型 ( 野指针 | 避免野指针推荐方案 )

文章目录 一、野指针 二、避免野指针推荐方案 一、野指针 ---- 参考 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 ) 四....野指针 ( 程序BUG根源 ) 博客章节 ; 野指针产生原因 : 指针变量 指向的 内存空间 被释放 , 但是 指针变量 还保存着一个地址值 , 此时不能随便修改该地址值 中的数据 ; 指针变量 与 指针指向的内存空间数据值...是不同的概念 ; 二、避免野指针推荐方案 ---- 避免野指针方法 : 定义指针变量 置空 : 声明 指针变量 时 , 为其设置初始值 NULL ; char *p = NULL; p = (char...*)malloc(10); 释放内存后 指针变量 置空 : 释放 指针变量 指向的内存后 , 立刻将指针变量设置为 NULL ; free(p); p = NULL; 只要 声明指针 , 一律给 指针变量...设置 NULL 初始值 ; 只要 释放指针 , 一律将指针变量设置 NULL ; 这样 使用指针 前 , 判断该 指针变量 是否为 NULL , 就可以判断该指针是否是有效指针 ;

22020

15.Go复合类型-指针

15.Go复合类型-指针 7:指针 7.1 变量内存与地址 前面我们讲过存储数据的方式,可以通过变量,或者复合类型中的数组,切片,Map,结构体。...i=%d, p=%v", i, p) // 执行如下: i=100, p=0xc00000a0a8 指针变量p 的定义是通过*这个符号来定义,指针变量p 的类型为*int, 表示存储的是一个整型变量的地址...如果指针变量p存储的是一个字符串类型变量的地址,那么指针变量p的类型为*string p=&i : 该行代码的意思是,将变量i的地址取出来,并且赋值给指针变量p.也就是指针变量p指向了变量i的存储单元。...也可以使用自动推导类型的方式: q := new(int) *q = 787 fmt.Println(*q) 7.5 指针做函数参数 指针也可以作为函数参数,那么指针作为函数参数在进行传递的时候,是值传递还是引用传递呢...: {1 zhangsan 90} 自动推导类型定义结构体指针变量: 也可以使用自动推导类型 type Student struct { id int name string score

21630

Golang数据类型指针

1、概述 2、声明 3、空指针 4、用指针修改值 5、指针指针 1、概述 每个变量在内存中都有对应的存储位置,也就是内存地址 指针类型是指变量存储的是一个内存地址的变量类型,在golang中可以通过...&运算符获取变量的指针 取变量指针的语法 ptr := &v // v的类型为T // v:代表被取地址的变量,类型为T // ptr:用于接收地址的变量,ptr的类型就为*T,称做T的指针类型。...*代表指针 2、声明 指针声明需要指定存储地址中对应数据的类型,并使用*作为类型前缀进行指针取值 func main() { //指针取值 a := 10 b := &a //...fmt.Println("非空") } else { fmt.Println("空值") } } 还可以使用new函数进行初始化,new函数会根据数据类型申请内存空间并使用零值填充...指针的值 4、用指针修改值 exchange函数依次进行的操作: 取c指针的值, 赋给临时变量t 取d指针的值, 赋给c指针指向的变量 将c指针的值赋给d指针指向的变量 func exchange

98140

【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组类型* 定义数组指针 )

文章目录 总结 一、使用 数组类型* 定义数组指针 二、完整代码示例 总结 typedef int(ArrayType)[3]; ArrayType *p = NULL; 一、使用 数组类型...* 定义数组指针 ---- 数组类型指针 就是 定义一个指针 , 指向数组首地址 ; 使用 数组类型* 定义数组指针 , 首先 , 定义数组类型 别名 , typedef int(ArrayType...)[3]; 然后 , 使用别名类型 , 声明数组变量 , ArrayType array2 = {0}; 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 , 指针指向的数据类型为...int[3] 数组类型的变量 array2 ; ArrayType *p = NULL; p = &array2; 验证上述 定义的数组指针 : 为 数组元素 赋值 , //...// 最后 , 声明一个指针 , 将 array2 变量地址赋值给该指针 // 指针指向的数据类型为 int[3] 数组类型的变量 array2 ArrayType *p = NULL;

3.4K20

【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

的 返回值 不是 " 函数重载 " 的 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型...函数类型 定义 函数指针 首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数的 参数列表是 2 个 int 参数 , 返回值是 int ;..., 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ; // 根据 函数类型 定义 函数指针 func* func1...= add; 3、通过 函数指针类型 定义 函数指针 首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数...); 然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ; // 根据 函数指针类型 定义 函数指针 func_ptr func2

15630

【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

的 返回值 不是 " 函数重载 " 的 判断标准 ; 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ; 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型...函数类型 定义 函数指针 首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数的 参数列表是 2 个 int 参数 , 返回值是 int ;..., 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ; // 根据 函数类型 定义 函数指针 func* func1...= add; 3、通过 函数指针类型 定义 函数指针 首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数...); 然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ; // 根据 函数指针类型 定义 函数指针 func_ptr func2

11230

C语言指针做函数参数,指针做函数返回类型

有的时候,对于整数、小数、字符等基本类型数据的操作也必须要借助指针,一个典型的例子就是交换两个变量的值: #include void swap(int a, int b){...对于像 int 等基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。...指针的函数返回类型: 程序编译后,每个函数都有执行第一条指令的地址即首地址,称[函数指针。函数指针即指向函数的指针变量,要间接调用函数可以使用指针变量来实现。...int (*pf)(int, int); 通过将pf与括号中的“*”强制组合组合在一起,表示定义的pf是一个指针,然后与下面的“()”再次组合,表示的是该指针指向一个函数,括号里表示为int类型的参数,...#include #include char *strs(char *strl1, char *strl2);//声明一个char*类型指针函数 int main

2.5K20

【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用 typedef 定义函数指针类型 )

int) 类型的函数 , 将 add 函数地址 赋值给 函数指针 p , 之后通过 函数指针 p 调用 add 函数 ; 代码如下 : // 声明一个 int(int, int) 类型指针变量 /...func_add // 使用时需要使用该类型指针调用函数 typedef int fun_add(int, int); 使用定义的 函数类型 调用函数 : 定义函数类型指针类型 func_add...4、使用 typedef 定义函数指针类型 定义函数指针类型 语法格式如下 : typedef returntype (*newfunname)(parameterlist) typedef 是 类型重命名...pFun_add)(int, int); 使用定义的 函数指针类型 调用函数 : 定义函数指针类型 pFun_add 的 变量 , 然后 将 add 函数地址 赋值给 该变量 , 然后 通过 函数指针变量..., int) 类型 是 函数类型 // 该指针 指向 函数地址 int(*p)(int, int) = add; // 通过函数指针调用 函数 p(3, 4); // 定义函数指针类型变量

34660
领券