首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >贝尔温&ch_array[0]和ch_array有什么区别?

贝尔温&ch_array[0]和ch_array有什么区别?
EN

Stack Overflow用户
提问于 2013-04-28 17:50:44
回答 2查看 118关注 0票数 1

当我定义:

代码语言:javascript
复制
char ch_array[50];
  1. &ch_array[0]ch_array有什么区别?
  2. 如果我这样定义呢? char *ch_array = (char *) malloc(sizeof(char)*50); 问题实际上来自于当我使用(&ch_array + 128)&ch_array[128]时,当使用bcopy(&ch_array + 128, buf, 128);时。
  3. 我这里有一个分段错误,但是使用bcopy(&ch_array[128], buf, 128);没有错误,为什么?它与存储数组的位置有关吗?
EN

回答 2

Stack Overflow用户

发布于 2013-04-28 17:58:03

代码语言:javascript
复制
bcopy(&ch_array[128], buf, 128);

等于

代码语言:javascript
复制
bcopy(ch_array+128, buf, 128);

代码语言:javascript
复制
bcopy(&ch_array+128, buf, 128);

是完全不同的。

票数 1
EN

Stack Overflow用户

发布于 2013-04-28 18:06:47

首先,ch_array&ch_array是不同的,无论使用哪种ch_array定义。ch_array&ch_array[0]几乎都是同义词,尽管编译器在ch_array上会阻塞,但会接受&ch_array[0]ch_array&ch_array[0]均为char *型。&ch_arraychar **型的。

ch_array + 128&ch_array[128]的同义词。这不是&ch_array[128]的同义词。前者平均为128个字节到ch_array。后者意味着在ch_array地址之后有128个字符指针,这可能是某种随机的位置;在您的例子中,它甚至不是地址空间的一部分。

其次,如果您确实定义了ch_array[50],然后访问了128元素,那么您也需要一个SEGV。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16265852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档