p是指向数组中某个特定元素的指针 那么p+i 与 *(p+i)、*p++有什么区别? 请详细说明下~ 谢谢~~~~~~
*p++是什么意思??还是没看懂????假设数组啊a[10]={0,1,2,3,4,5,6,7,8,9};p指向的是a[0];那么*p++得到是什么呢?...
*p++是什么意思 ??还是没看懂????假设数组啊a[10]={0,1,2,3,4,5,6,7,8,9} ;p指向的是a[0];那么 *p++得到是什么呢?
展开
4个回答
展开全部
p是指针,那么p+i也是指针,即其数值表征的是地址如0x0001.*是取内容运算符,因此*(p+i)是指p+i地址中存储的数据,*(P++)与*p;p=p+1;两句是等效的,这样写简洁且编译效率更高。比如
int a[10],*p,b,c;
p=a;
p=p+2;
b=*(p+2);
c=*p++;
这段小程序包含了你说的三个语句。假设a占用的地址是0010H(H代表十六进制),且数据内容为0~10,
那么p=a执行之后,p=0010H,注意此时p内容为地址。
p=p+2执行之后,p=0014H(假设int型数据占两个字节,则P每加1实际数值增加2),仍然为地址,即p指向了a的第3个元素
b=*(p+2);执行后,b=4,及p先向下移动2个元素,然后取出内容赋值给b。p+2为0018H,因此b的值为0018H这个内存单元的值,及a的第五个元素,为4。
c=*p++等效*p;p=p+1;两句,因此此句执行之后c=2(0014H中的内容),p=0016H。
只要明白数据地址和数据本身的区别,即内存地址和内存数据的区别即可明白指针的含义与用法,谭浩强老师的C程序设计中多维数组那有一章有详细论述。指针使用非常灵活,编译器能够根据p指向对象的类型决定p+i到底增加多少数值,如指向整型数据时为i*2,float型时为i*4等等。
int a[10],*p,b,c;
p=a;
p=p+2;
b=*(p+2);
c=*p++;
这段小程序包含了你说的三个语句。假设a占用的地址是0010H(H代表十六进制),且数据内容为0~10,
那么p=a执行之后,p=0010H,注意此时p内容为地址。
p=p+2执行之后,p=0014H(假设int型数据占两个字节,则P每加1实际数值增加2),仍然为地址,即p指向了a的第3个元素
b=*(p+2);执行后,b=4,及p先向下移动2个元素,然后取出内容赋值给b。p+2为0018H,因此b的值为0018H这个内存单元的值,及a的第五个元素,为4。
c=*p++等效*p;p=p+1;两句,因此此句执行之后c=2(0014H中的内容),p=0016H。
只要明白数据地址和数据本身的区别,即内存地址和内存数据的区别即可明白指针的含义与用法,谭浩强老师的C程序设计中多维数组那有一章有详细论述。指针使用非常灵活,编译器能够根据p指向对象的类型决定p+i到底增加多少数值,如指向整型数据时为i*2,float型时为i*4等等。
展开全部
如果只是p+i的话,相当什么都没做,p还是指向那个元素(在这我假设是data)...
*(p+i)表示的是从元素data开始,向后数i次,数到的那个数就是*(p+i)表示的值...
++的优先级比*高,所以*p++表示的是data后面那个元素的值...
*(p+i)表示的是从元素data开始,向后数i次,数到的那个数就是*(p+i)表示的值...
++的优先级比*高,所以*p++表示的是data后面那个元素的值...
追问
不对哦~ 一元运算符*的优先级可是高于算术运算符的哦!
追答
是这样的啊,翻书验证了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p+i是一个地址数组a[i]的地址,*(p+i)相当于a[i]为一个值,*p++相当于*p;p++这两条语句
追问
我一直不懂*p和p的区别,是不是*p代表的是指向的元素的值;而p则代表指向的元素的地址呢,?
就像 p= &c 此时是把c的地址赋值个变量p,在此处而不用*p? *p++是不是就是 先取出p所指向元素的值,然后再做加1运算? 谢谢了(⊙o⊙)~
追答
*p++,++的不是值,而是地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p+i :表示第i个元素的指针,其值为第i个元素的地址。
*(p+i):表示第i个元素,其值为第i个元素的值。
*p++:表示取p所指元素的值,并将p指向下一个元素。
*(p+i):表示第i个元素,其值为第i个元素的值。
*p++:表示取p所指元素的值,并将p指向下一个元素。
追问
*p++:表示取p所指元素的值,并将p指向下一个元素?这里是不是先取值,再对所取得值做加以运算呢,好像不是指向下一个元素哦~ 求解释
追答
这里是先取值,不是再对所取得值做加以运算,而是将p指向下一个元素。你可以编程验证上述结论的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询