C语言中*pa+1和*(pa+1)的区别

  这里需要掌握指针的解引用、数组的第一个元素和数组名的地址相同,这个知识点非常重要。

一、*pa+1
  int *pa在C语言中表示定义一个名为pa的指针用来存储一个内存里的地址。如果在printf中调用*pa就表示读取数组的第一个元素的值,按照C语言的运算规则依次进行运算那么就可以知道*pa+1=数组第一个元素的值+1。通过下面的程序大家可以看到*pa+1的运行结果是2,这个2就是1+1得来的。

#include <stdio.h>
int main()
{
	int a[]={1,3,5,7,9};
	int *pa;
	pa=a;
	
	printf("a=%p\n",a);
	printf("pa=%p\n",pa);
	printf("*pa=%d\n",*pa);
	printf("*pa+1=%d\n",*pa+1);
	return 0;
}

运行结果
在这里插入图片描述
二、*(pa+1)
  通过前面的介绍和程序展现已经知道了pa的含义通过pa的含义之后就可以解释*(pa+1)了。在这里

pa=a=&a[0]
都是表示数组的地址,可以通过下面的程序体现出来。
#include <stdio.h>
int main()
{
	int a[]={1,4,7,2,6};
	int *pa;
	pa=a;
	printf("pa=%p\n",pa);
	printf("a=%p\n",a);
	printf("&a[0]=%p",&a[0]);
	return 0;
}

运行结果
在这里插入图片描述
那么如果我们对着三者都进行+1操作会得到什么呢?通过对比下面的程序的运行结果和上面的程序的运行结果我们可以看到地址被加了4(因为我的编译器int型是4个字节)。这个4可不简单,得到了这个地址,我们再对这个地址进行解引用不就可以得到这地址存储的内容了么。

#include <stdio.h>
int main()
{
	int a[]={1,4,7,2,6};
	int *pa;
	pa=a;
	printf("pa+1=%p\n",pa+1);
	printf("a+1=%p\n",a+1);
	printf("&a[0]+1=%p",&a[0]+1);
	return 0;
}

运行结果
在这里插入图片描述
现在对这哥儿仨进行解引用,得到结果如下

#include <stdio.h>
int main()
{
	int a[]={1,4,7,2,6};
	int *pa;
	pa=a;
	printf("*(pa+1)=%d\n",*(pa+1));
	printf("*(a+1)=%d\n",*(a+1));
	printf("*(&a[0]+1)=%d",*(&a[0]+1));
	return 0;
}

运行结果
在这里插入图片描述
现在你知道*pa+1和*(pa+1)的区别了么。
补充说明:对于解引用不熟悉的小伙伴可以去看一下百度百科对解引用的介绍《解引用》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

127.0.0.1/24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值