漫谈(一)对”C“语言的理解,“不看后悔一辈子”

 臭名昭著的指针,该如何让自己释怀?

指针就是地址 ?错误

指针其实是一种保存变量地址的变量,在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这个指针变量自己本身的地址

P的初值存储图

“&i = 0x7ffc0fec322c”  i这个变量所在的内存地址

当执行完,p = &i;这个时候P本身的地址还是它原来的地址但是它所指向的地址编程的i。

&i = 0x7ffc0fec322c
----p = 0x7ffc0fec322c

此时这两个值是相同的说明p指向的地址就是i所在的地址。

总结:指针就是一个具体特殊功能的变量。

发布了64 篇原创文章 · 获赞 63 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq84395064/article/details/104602542