C语言对于指针p,*p,&p的理解

定义一个整形指针p:

int *p;
  • p:p是一个变量,但它与普通整型变量不同。普通整型变量一般用来保存一个数值,p 保存的也是一个数值,但这个数值代表地址,这个地址可以改变。
  • *p:*p是取p对应的地址里的数据 。
  • &p:因为p是一个变量,所以就要有内存空间来保存这个变量,这就是&p,&符号代表取地址

我们进行如下操作:

#include "stdio.h"

int main()
{
	int i;//定义循环变量
	int a[] = {1,3,5,7,9};//定义一个数组
	int *p = a;//将指针指向该数组

	printf("数组 a 的地址为 %p\n", a);//输出数组a的地址
	printf("存放 p 的地址为 %p\n", &p);//输出&p,也就是存放指针p的地址

	for(i = 0; i < 5; i++)
	{
		printf("%p 地址存放 %d\n", p, *p);//输出数组的每个元素及存放该元素的地址
		p++;
	}
	printf("\n");

	return 0;
}

运行结果:
运行结果
从运行结果来看,在内存中有这样一块区域:

地址数据地址数据
0019FF000019FF181
0019FF040019FF1C3
0019FF080019FF205
0019FF0C0019FF247
0019FF100019FF289
0019FF140019FF180019FF28

其中0019FF14为存放指针变量p的地址,也就是&p=0019FF14。
该地址的数据为0019FF18,也就是p=0019FF18,找到与该数据相同的地址,在右侧第一行,该地址的数据为1,也就是*p此时=1。
之后每次循环p++,由于p是整型指针,所指向的数据占4字节,编译器会对+的变量乘以4,也就是每次+4,这样对0019FF18地址+1结果指向0019FF1C,以此类推。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值