在c语言的指针运算中*(p+1)与p+1有什么区别 p是指针

有道例题是这样的#include<stdio.h>main(){inti=108,*p=&i;doublef=12.34,*pf=&f;longl=123,*pl=&l;... 有道例题是这样的
#include<stdio.h>
main()
{
int i=108,*p=&i;
double f=12.34,*pf=&f;
long l=123,*pl=&l;
printf("*p=%d,\t\t p=%lu\n",*p,p);
printf("*(p+1)=%d,\t\t (p+1)=%lu\n\n ",*(p+1),(p+1));
printf("*pf=%lf,\t pf=%lu\n",*pf,pf);
pf++;
printf("*pf=%lf,\t pf=%lu\n\n",*pf,pf);
printf("*pl=%ld,\tpl=%lu\n",*pl,pl);
pl++;
printf("*pl=%ld,\tpl=%lu\n",*pl,pl);
}

答案是:*pi=108, pi=1245052
*(pi+1)=1245120, pi+1=1245056

*pf=12.340000, pf=1245040
*pf=0.000000, pf=1245048

*pl=123, pl=1245032
*pl=1245028 pl1245028

为什么会出现这种答案? 第二个*pf为什么会等于0 啊 pi 与*(pi+1)、 pi+1 之间有什么联系吗?
展开
 我来答
床前明月儿
高能答主

2019-12-10 · 探索生活中的另一种可能
床前明月儿
采纳数:101 获赞数:171950

向TA提问 私信TA
展开全部

一、指代不同

1、*(p+1):表示具体的数值。

2、p+1:表示内存地址。

二、指向的值不同

1、*(p+1):指针p所指向的内存地址单元的下一个内存地址单元中的值。

2、p+1:指针p所指向的内存地址的下一个内存地址。


三、内存表示不同

1、*(p+1):*的优先级比+的优先级高,所以*P+1在编译器中是先取出p指向的int值然后加1。

2、p+1:直接将内存中指向的地址加1,就是将要指向的地址。

参考资料来源:百度百科-指针变量

参考资料来源:百度百科-指针

天云小店
推荐于2017-09-29 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:786万
展开全部

*(p+1)表示具体的数值,指针p所指向的内存地址单元的下一个内存地址单元中的值;

p+1 表示地址,指针p所指向的内存地址的下一个内存地址。


可以通过下面的实例来理解*(p+1)与p+1之间的区别:

int *p;  // 定义一个int类型的指针p
int a[3]={1,2,3}; // 定义一个int类型的数组a,并进行初始化
p = a;  // 使指针p指向数组a的首地址
printf("%d", *(p+1));  // 输出2,等价于a[1]
printf("%x", p+1);     // 以16进制形式输出a[1]的地址(如08ff12),等价于&a[1](&为取地址运算符)

 

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天河19910613
2012-05-19 · TA获得超过614个赞
知道答主
回答量:42
采纳率:100%
帮助的人:6.7万
展开全部
p+1是指p指针加1即p的下一个指针,*(p+1)是指p+1所指向的对象
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友aad53c6
2012-05-19 · TA获得超过118个赞
知道答主
回答量:82
采纳率:0%
帮助的人:47.5万
展开全部
举个例子吧 比如a[5]={2,4,6,8,1O};*(p+1)指的是a[1]即4,而*p+1指a[O]加1即3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
影视乐户
2012-05-20
知道答主
回答量:32
采纳率:0%
帮助的人:7.5万
展开全部
当然有区别 指向指针的指针*(p+1) p+1就p的下一个指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式