臭名昭著的指针,该如何让自己释怀?
指针就是地址 ?错误
指针其实是一种保存变量地址的变量,在c语言中是比较频繁使用的。
1.“*”作为一种引入类型
int *(类型) :指向int的指针类型
float *(类型):指向float的指针类型
double*(类型):指向double的指针类型
因为是指针类型,所以它和int类型、float类型、double类型一样
2.先有“指针类型”,才会有指针变量
指针既有指针变量,又有指针指向的值。
对语义的理解,最简单最直接的理解还是以内存模型(也就是小格子)为基础,画出了内存模型,无论是什么类型的指针还是几阶指针都一目了然了。
int main(void)
{
int *p;
int i = 3;
printf("p = %p\n",p);
printf("&p = %p\n",&p);
printf("&i = %p\n",&i);
p = &i;
printf("----p = %p\n",p);
printf("----&p = %p\n",&p);
return 0;
}
输出结果为
p = 0x7ffc0fec3320
&p = 0x7ffc0fec3230
&i = 0x7ffc0fec322c
----p = 0x7ffc0fec322c
----&p = 0x7ffc0fec3230
程序解释:
“p = 0x7ffc0fec3320” p指针所指向的地址是0x7ffc0fec3320
“&p = 0x7ffc0fec3230” p这个指针变量自己本身的地址
“&i = 0x7ffc0fec322c” i这个变量所在的内存地址
当执行完,p = &i;这个时候P本身的地址还是它原来的地址但是它所指向的地址编程的i。
&i = 0x7ffc0fec322c
----p = 0x7ffc0fec322c
此时这两个值是相同的说明p指向的地址就是i所在的地址。
总结:指针就是一个具体特殊功能的变量。