在开始理解C指针之前,先做个试验:
#include <stdio.h>
int main()
{
int a;
int *p;
a = 5;
p = &a;
printf("[0] = %u\n",a);
printf("[1] = %u\n",*p);
printf("[2] = %u\n",&a);
printf("[3] = %u\n",p);
printf("[4] = %u\n",&p);
return 0;
}
运行结果:
[0] = 5
[1] = 5
[2] = 1294509660
[3] = 1294509660
[4] = 1294509648
开始理解这段代码:
【1】int a定义了一个变量a
【2】int *p定义了一个指针型变量p
注意:虽然*和int之间存在一个空格,并且紧贴变量p,但需要注意int *才是一个整体,表示定义一个指针型整型变量p。
【3】p = &a 将变量a的地址存入指针变量p中。
注意:p已经被定义为int *类型,所以只能用来存储地址类型的数据。比如变量a的地址就是一个地址类型的数据。
【4】通过执行结果可知:
*p就是把地址对应内存空间所存储的数据,因为p存储的变量a的地址,那么*p对应的就是a变量的值5
p变量存的是a的地址,所以p和&a相同。
&p是指针变量p的地址。