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

有道例题是这样的
#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 之间有什么联系吗?

一、指代不同

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,就是将要指向的地址。

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

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

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-29

*(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](&为取地址运算符)

 

第2个回答  2012-05-19
p+1是指p指针加1即p的下一个指针,*(p+1)是指p+1所指向的对象本回答被提问者采纳
第3个回答  2012-05-19
举个例子吧 比如a[5]={2,4,6,8,1O};*(p+1)指的是a[1]即4,而*p+1指a[O]加1即3
第4个回答  2012-05-20
当然有区别 指向指针的指针*(p+1) p+1就p的下一个指针

在c语言的指针运算中*(p+1)与p+1有什么区别p是指针
1.指代内容不同:`*(p+1)`是一个复合操作,它首先将指针`p`的值加1,然后通过`*`运算符获取新指向的内存单元中的值,因此,它实际表示的是存储在`p`指向内存地址之后的下一个值。相比之下,`p+1`仅仅表示指针`p`本身增加1个内存地址,它指向的是内存中的下一个位置,但并不读取该位置的值...

在c语言的指针运算中*(p+1)与p+1有什么区别 p是指针
一、指代不同 1、*(p+1):表示具体的数值。2、p+1:表示内存地址。二、指向的值不同 1、*(p+1):指针p所指向的内存地址单元的下一个内存地址单元中的值。2、p+1:指针p所指向的内存地址的下一个内存地址。三、内存表示不同 1、*(p+1):*的优先级比+的优先级高,所以*P+1在编译器中...

在c语言的指针运算中*(p+1)与p+1有什么区别 p是指针
在C语言的指针运算中,`*`与`p+1`有着本质的区别。简单来说,`*`表示的是指针`p`所指向的下一个元素的值,而`p+1`则表示的是指向指针`p`所指向的下一个元素的指针。详细来说,当我们有一个指针`p`指向某个数据类型的元素时,比如`int`类型,`p`中存储的是该元素的内存地址。当我们对指...

在c语言的指针运算中*(p+1)与p+1有什么区别 p是指针
在C语言的指针运算中,`*`表示的是指针`p`向后移动一个存储单位后指向的内容,而`p+1`表示的是指针`p`向后移动一个存储单位后的地址。详细解释如下:指针是C语言中用来存储变量地址的变量。当我们对指针进行加1操作时,实际上并不是将指针的值简单地加1,而是加上了一个存储单位的大小。这个存储...

c语言中*p+1和*(p+1)有什么不同
1、表示的含义不同 p表示此指针指向的内存地址中存放的内容。p表示一个指针变量的名字,指此指针变量所指向的内存地址。2、输出的格式不同 p一般是一个和指针类型一致的变量或者常量。p输出的是一个16进制数, 输出一个指针的地址。3、功能不同 p是让程序去那个地址取出数据。p存放的是地址。例子:...

C语言中指针*p+i与p+i表示的意思相同吗?
不一样;p+1 指的是指针p所指的变量加1 p+1 指的是指针向后移一位

c语言对于数组a[1,3,5,7]*p+1和*(p+1)的区别
假设p = a;则*p = a[ 0 ] = 1 p + 1 = a[ 0 ] + 1 = 2;p + 1 = &a[ 1 ] \/\/这里的 p + 1 是指针p的指向往后挪了一位 因此 *(p + 1) = a[ 1 ] = 3

如果有*p 则*(p+1) 和(*P+1) 分别是什么意思
你说的这是c语言里的指针那块吧??举个例子 如果指针p指向3000这个地址,并且在地址3000里存放了 0xf1这个数,在3001这个地址里存放了0xfe这个数,那么*p 就是指的是 oxf1,*(p+1) 就是指0xfe,而(*P+1) 就是指0xf0+1,也就是0xf2.

C语言中 *p=*p+1 还是*p=(*p+1)
第二个应该是*(p+1),*(p+1)的意思是括号先算!与*p+1 就是 先取出P所指向的值,再+1!所以截然不同!

请教C语言指针中 &p[0] p+i *(p+i) p[i] 区别 一直感觉很迷茫
C语言规定,对所定义的数组,数组名称等价于数组的首地址,即数组第一个元素的地址 & 是计算变量地址的运算符, * 是求出指定地址中的数据内容的运算符 所以,在定义了一维数组p的前提下,&p[0] 指的是数组第一个数组元素的地址,&p[0] 与 p 是等价的 p+i 是数组下标为i的数组元素的地址,...

相似回答