利用图形文字简单说说我对c语言指针和指针变量的理解

首先,指针是啥?指针变量是什么鬼?

关于指针,这里要先说说计算机内存部分,有点计算机基础的人都知道,计算机内存是有地址的,如果你不知道,好好百度一下内存地址。指针就是内存地址!!!

关于指针变量,是一块用于存储内存地址的特殊变量,说到底,它就是变量!!这个变量只能存指针,即内存地址,可以是别人的内存地址,也可以是自己的内存地址。这说明,它占用了一块空间!

那么,来上机更深一步理解指针和变量吧!
在这里,有两个符号要说明一下,*号理解为取地址中的内容(值);&取该块内存的地址

#include <stdio.h>
main()
{
	int *p;
	int a=4;
	p=&a;
	printf("p=%d,a=%d\n",p,a);
	printf("*p=%d\n",*p);
	printf("&p=%d,&a=%d\n",&p,&a);
	printf("*&p=%d\n",*&p);
	printf("**&p=%d\n",**&p);
}

这里请大家先自己计算得出结果再往下看。

第一句话,int *p;这句话的意思是,开辟了一块内存空间(记住,内存都是有地址的),p就是指针变量。由于是int型,该内存空间的大小为4byte,该块内存有地址,但内存中什么也没有。假设其内存地址为1703740,用图在计算机内存中表示如下
在这里插入图片描述

第二句话,Int a=4;开辟了一块新内存,这里假设地址为1703736,该块内存中有东西了,为4;值得一提的是,a和p两个变量占用的是同样大小的内存,4个byte.如下图

在这里插入图片描述第三句话,p=&a;取出内存块a的地址,即1703736,赋值给内存块p。此时,p中便有了内容,即p=1703736,如下图。
在这里插入图片描述
第四句话,printf(“p=%d,a=%d\n”,p,a);输出内存块p和内存块a中的内容(值),由上图,很明显知道,p=1703736,a=4

第五句话,printf("*p=%d\n",*p);这里要明白 * 的真正意思,取地址的内容(值)。故p的内容代表的必定是一个地址,否则会报错。这里我们由第四句话知p=1703736,是为a的地址。故这里 *p相当于 *(1703736),即取地址1703736中的内容(值),由图三看,不就是4嘛!

第六句话,printf("&p=%d,&a=%d\n",&p,&a);&代表的是取变量的地址。p变量的地址为1703740,a变量的地址为1703736

第七句话,printf(" * &p=%d\n",*&p)
&p,取得变量p的地址,不就是1703740嘛
那 *&p 就相当于 *(1703740),看看图三,该地址的内容,就是1703736。

第八句话,printf(" * * &p=%d\n",**&p)
&p,取变量p的地址,还是1703740嘛!
那么此时 **&p相当于 **(1703740)
再来,*(1703740),取地址的内容(值),看看图三,哎,不就是1703736嘛!
此时 **(1703740)相当于 *(1703736),取地址的内容(值),看看图三,就是4咯。

总结,可能文字表述还不太清除,大家多看看我的图片,尤其是图三。希望大家都能理解。
第一次发表文章,如有错误还请大家多多指教!谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值