关于指针的问题,求大神指教

lbq199204 2012-03-09 07:35:46
举例:
int i;
int * p;
p = &i;
那么 *p就等价于i。

那么
int i;
char c[10];
char *p;
p = c;

那么p[i]等价于*(p+i)
而不是*p[i]等价于*(p+i)呢。
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2012-03-09
  • 打赏
  • 举报
回复
语法规定
xzjlcyz 2012-03-09
  • 打赏
  • 举报
回复
0.0
连下标和*都没搞明白啊?下标本身就可以取值的,比如这里,p[i]就是指p的地址偏移i*sizeof(int)后取值。对于二维指针的时候我们会经常会用到下标来操作!
zhiy_wis 2012-03-09
  • 打赏
  • 举报
回复
lz你那样的话就重复了~貌似没有*p[i]这样写的;
whoareyou_123456 2012-03-09
  • 打赏
  • 举报
回复
此时p和c的效果相同
whoareyou_123456 2012-03-09
  • 打赏
  • 举报
回复
p得到的就是c数组的首地址
ttm0316 2012-03-09
  • 打赏
  • 举报
回复
p[i] = *(p+i) = c[i] = *(c+i)
指针和数组都是指向首元素的地址,指针变量可以偏移(p++);数组名不可以偏移(c++),因为,数组名是指向非常量数据的常量指针,或者简称:数组名是常量指针。
忘世麒麟 2012-03-09
  • 打赏
  • 举报
回复
假如p[5]={1,2,3,4,5}
p[3]代表数组中的整数4.
*(p+3)是这样计算的:从指针P所指的内存的地址(起始地址是&p[0])向下偏移3个单位,每个单位是一个char类型的大小,这样找到的是p[3]的地址(就是&p[3]),然后通过"*"运算符得到该地址所指的值,就是4.
所以*(p+i)=p[i];
而*p[i]是非法的(比如*p[3] 相当于 *4).
northcan 2012-03-09
  • 打赏
  • 举报
回复
int i;
char c[10];
char *p;
p = c;


p赋值为数组c的首地址,(p+i)就指向数组中的第i个元素,*(p+i)就是取数组中第i个元素的内容。
p[i]也是数组中第i个元素的内容,所以p[i]和*(p+i)等价。
*p[i]这个会引起编译错误,p[i]不是一个指针,不能够取内容。
ProgrammingRing 2012-03-09
  • 打赏
  • 举报
回复
p[i]就是一个char型值了……p+i是偏移然后取值

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧