C语言——void指针、NULL指针、指向指针的指针、
家电维修 2023-07-16 19:16www.caominkang.com家电维修技术
目录
一、void指针
二、NULL指针
三、指向指针的指针
1.指向指针的指针
2.指针数组和指向指针的指针
四、常量和指针
1.常量
2.指向常量的指针
3.常量指针
4.指向“指向常量的常量指针”的指针
一、void指针
- void指针我们把它称之为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给void指针。
代码举例:
#includeint main() { int num = 1024; int pi = # char ps = "LoveC"; void pv; pv = pi; printf("pi: %p, pv: %pn", pi, pv); pv = ps; printf("ps: %p, pv: %pn", ps, pv); return 0; }
运行结果
二、NULL指针
- 在C语言中,如果一个指针不指向任何数据,则称之为空指针,用NULL来表示。
#define NULL ((void )0)
- 当不清楚要将指针初始化为什么地址时,请将它初始化NULL;在对指针进行解引用时,先检查该指针是否为NULL。这种策略可以为今后编写大型程序节省大量的调试时间。
- NULL不是NULNULL用于指针和对象,表示控制,指向一个不被使用的地址;而‘‘’表示字符串的结尾。
三、指向指针的指针
1.指向指针的指针
#define NULL ((void )0)
1.指向指针的指针
代码举例
#includeint main() { int num = 520; int p = # int pp = &p; printf("num: %dn", num); printf("p: %dn", p); printf("pp: %dn", pp); printf("&p: %p,pp: %pn", &p,pp); printf("&num: %p,p: %p, pp: %pn", &num, p, pp); return 0; }
运行结果
2.指针数组和指向指针的指针
- 至少有两个好处① 避免重复分配内存;② 只需要进行一处修改
- 代码的灵活性和安全性都有了显著提高
代码举例
#includeint main() { char cBooks[] = { " ", " ", " ", " ", " ", "<带你学C带你飞>"}; char byFishC; char jiayuLoves[4]; int i; byFishC = &cBooks[5]; jiayuLoves[0] = &cBooks[0]; jiayuLoves[1] = &cBooks[1]; jiayuLoves[2] = &cBooks[2]; jiayuLoves[3] = &cBooks[3]; printf("FishC出版的图书有 %sn", byFishC); printf("小甲鱼喜欢的图书有 n"); for(i = 0;i< 4;i++) { printf("%sn", jiayuLoves[i]); } return 0; }
运行结果
四、常量和指针
1.常量
- 常量应该是这样520,'a',3.14
- 或者这样
#define PRICE 520
#define A'a'
#define PI 3.14
- 还可以使用const关键字修饰,把变量变成只读,不可写入不可修改
const int price = 520;
const char a = 'a';
const float pi = 3.14;
2.指向常量的指针
- 指针可以修改为指向不同的常量
- 指针可以修改为指向不同的变量
- 可以通过解引用来读取指针指向的数据
- 不可以通过解引用修改指针指向的数据
- 常量应该是这样520,'a',3.14
- 或者这样
#define PRICE 520 #define A'a' #define PI 3.14
- 还可以使用const关键字修饰,把变量变成只读,不可写入不可修改
const int price = 520; const char a = 'a'; const float pi = 3.14;
2.指向常量的指针
- 指针可以修改为指向不同的常量
- 指针可以修改为指向不同的变量
- 可以通过解引用来读取指针指向的数据
- 不可以通过解引用修改指针指向的数据
代码举例
#includeint main() { int num = 520; const int um = 880; const int pc = &um; printf("um:%d,&um:%pn",um,&um); printf("pc:%d,pc:%pn",pc,pc); pc = # printf("num:%d,&num:%pn",num,&num); printf("pc:%d,pc:%pn",pc,pc); num = 1024; printf("pc:%d,pc:%pn",pc,pc); return 0; }
运行结果
3.常量指针
(1)指向非常量的常量指针
- 指针自身不可以被修改
- 指针指向的值可以被修改
(2)指向常量的常量指针
- 指针自身不可以被修改
- 指针指向的值也不可以被修改
代码举例
#includeint main() { int num = 520; const int um = 880; const int const p = # //不可被修改,不能执行 // p = 1024; // printf("p: %dn",p); //不可被修改,不能执行 // p = &um; // printf("p: %dn",p); num = 1024; printf("p: %dn",p); return 0; }
运行结果
4.指向“指向常量的常量指针”的指针
代码举例
#includeint main() { int num = 520; const int um = 880; const int const p = # const int const pp = &p; printf("pp: %p,&p: %pn",pp,&p); printf("pp: %p, p: %p, &num: %pn",pp,p,&num); printf("pp: %d, p: %d, num: %dn",pp,p, num); return 0; }
运行结果
上一篇:c#实现隐藏与显示任务栏的办法详解
下一篇:Windows8怎么删除输入法?