在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 之间有什么联系吗? 展开
#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 之间有什么联系吗? 展开
5个回答
展开全部
*(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](&为取地址运算符)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p+1是指p指针加1即p的下一个指针,*(p+1)是指p+1所指向的对象
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
举个例子吧 比如a[5]={2,4,6,8,1O};*(p+1)指的是a[1]即4,而*p+1指a[O]加1即3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然有区别 指向指针的指针*(p+1) p+1就p的下一个指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询