指针总结(一)
指针
指针的相关说明
指针就是变量在内存中的地址。
在C语言(高级语言)中,我们可以使用变量名来访问变量,这是由编译器实现的给我们的便利(我们写的C程序都需要编译器编译后来运行)。这样的话,我们就可以不用记住变量的地址,当我们访问变量的时候,本质上还是通过指针访问变量的内容。
变量的值就是分配给该变量的内存位置所存储的值。例如:
int a = 100 表示变量a在内存中存储的值为整型100;int *p = &a 变量p 是一个变量,变量的值是a的地址的值。
a p
100
a的地址
通过一个指针访问它所指向的地址的过程称为间接访问(indirection)或解引用指针(dereferencing the pointer)。
warning
指针的间接访问前提是:指针必须初始化,也就是说它指向一个变量的地址,否则会出现段错误。
例如:
intmain(){
int * p;
*p = 1; //会出现断错误。(segment fault)
}
指针的指针
*操作符具有从右到左的结合性,这对我们理解指针的指针右很大的帮助。
例如:int **c = NULL;是一个指向指针的指针;我们可以这样理解(用括号括起来),如:(int *) *c所示,这能帮大家理解,而不是程序得这么写。从上面可以看出来c是一个指针变量,并且该变量保存的内容为一个地址,改地址同时又指向了int 变量的地址。
如下图所示,c是一个指针的指针,b是一个指针,a是一个变量。
测试程序
int main(){
inta=10;
int*b = &a;
printf(“%x\n”,&a);//变量a的地址
printf(“%x\n”,b);//变量b的值(b的类型为int *,即保存int 类型变量的地址)
printf(“%x\n”,&b);//打印变量b的地址,因为b虽然是一个指针,但它本身还是一个变量,所以它也有地址。
int**c;
c= &b;
printf(“%x\n”,c);//c变量包存的地址是变量b的地址
printf(“%x\n”,&c);//打印变量c的地址
}
存储结构图
a(0xa9f78754) b(0xa9f78748) c(0xa9f787a8)
10
0xa9f78754
0xa9f78748
总结
1、 指针是一个变量,值为另一个变量的地址。
2、 指针使用时务必要初始化。