利用下标获取指针的数值

(1)当定义一个指针数据之后 int *p ,通过*p 获取指针指向的数据。

(2)当指针指向一个数组的时候,int *p  ,  int a[3]  ,   p=a ; 因为数组名就是指向数组第一个数值的地址。如下

int main()
{
	int *p=NULL;
	int a[3]={0,1,2};
	p=a;
	printf("a[1] is %d\n",a[1]);
	printf("p[1] is %d\n",p[1]);
	printf("*(p+1) is %d\n",*(p+1));
	printf("*(a+1) is %d\n",*(a+1));
	return 0;
}


/*输出结果
a[1]=1
p[1]=1
*(p+1)=1
*(a+1)=1

*/

实际上系统在编译时,数组元素 a[i] 就是按 *(a+i) 处理的。即首先通过数组名 a 找到数组的首地址,然后首地址再加上i就是元素 a[i] 的地址,然后通过该地址找到该单元中的内容。
所以 a[i] 写成 *(a+i) 的形式,程序的执行效率会更高、速度会更快。因为在执行程序的时候数组是先计算地址,然后转化成指针。而直接写成指针 *(a+i) 的形式就省去了这些重复计算地址的步骤。

(3)当指针指向一个地址的时候,可以通过p[1]这种下标来访问地址存放的数值。

#include<stdio.h> 
int main()
{
	int *p=NULL;
	p=malloc(80);
	p[0]=1;
	p[1]=2;
	*(p+1)=3;
	printf("p[0]= %d \n",p[0]);
	printf("p[1]= %d",p[1]);
	free(p); 
}

/*
p[0]=1;
p[1]=3;
*/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值