06深入理解C指针之---指针操作和比较
该系列文章源于《深入理解C指针》的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教。
指针作为一种特殊类型的变量,必须遵守C语言中变量先声明后使用的原则。本节内容中指针的操作主要包括指针的声明、指针值的获取、指针的解引、指针的打印、指针的阅读及其他内容。
一、指针的操作:
1、指针的声明,切记指针是一种特殊变量,这种变量中没有直接存储数值,存储的数值是另外变量的地址。
其中,看代码第6、7、8行,都是指针变量的声明,无论*的位置如何,靠近int还是变量名,还是哪个都不靠近,都可以表示,根据自己的习惯坚持即可,个人建议靠近变量名好。
2、地址操作符,使用&获取变量地址的符号,常用来为指针变量赋值。
其中、代码的第6、7、9行,都是地址操作符的应用
3、指针的打印,使用%p占位符即可打印指针变量的值,另外变量的地址。
其中、代码的第12、13、14、19、21、23行都是打印指针值的应用
4、指针的解引用,通过指针获取指针值对应的变量的值。
其中、代码的第12、13、14、19、21、23行都是指针解引用的应用。
1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 int iVar = 19; 6 int *ptrVar1 = &iVar; 7 int* ptrVar2 = &iVar; 8 int * ptrVar3 = NULL; 9 ptrVar3 = &iVar; 10 11 printf("the iVar is %d and address is %p\n", iVar, &iVar); 12 printf("the ptrVar1 is %p and *ptrVar1 is %d\n", ptrVar1, *ptrVar1); 13 printf("the ptrVar2 is %p and *ptrVar2 is %d\n", ptrVar2, *ptrVar2); 14 printf("the ptrVar3 is %p and *ptrVar3 is %d\n", ptrVar3, *ptrVar3); 15 16 iVar++; 17 printf("the iVar is %d and address is %p\n", iVar, &iVar); 18 (*ptrVar1)++; 19 printf("the ptrVar1 is %p and *ptrVar1 is %d\n", ptrVar1, *ptrVar1); 20 (*ptrVar2)++; 21 printf("the ptrVar2 is %p and *ptrVar2 is %d\n", ptrVar2, *ptrVar2); 22 (*ptrVar3)++; 23 printf("the ptrVar3 is %p and *ptrVar3 is %d\n", ptrVar3, *ptrVar3); 24 25 return 0; 26 }
二、指针的补充:
1、null在C语言中充分体现了C语言的逻辑混乱,C语言中null的出现主要和指针变量有关。
null宏定义中被定义为: #define NULL ((void *)0)这种定义一般在stddef.h、stdlib.h和stdio.h中出现;
null可以用来初始化指针变量,表示指针变量指向空,也可以直接将指针变量赋值为零也可;
null可以在字符中表示全为0的字节,表示不包含任何内容;
null可以表示字符串表示没有任何内容;
null语句表示只有一个;没有任何内容的语句
2、void指针,通用指针,可以存放任何的数据类型的指针,void指针与char指针的存储和对其方式相同,void指针在使用前一般需要先强制转换下