漫谈(一)对”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所在的地址。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值