当我定义:
char ch_array[50];&ch_array[0]和ch_array有什么区别?(&ch_array + 128)和&ch_array[128]时,当使用bcopy(&ch_array + 128, buf, 128);时。bcopy(&ch_array[128], buf, 128);没有错误,为什么?它与存储数组的位置有关吗?发布于 2013-04-28 17:58:03
bcopy(&ch_array[128], buf, 128);等于
bcopy(ch_array+128, buf, 128);但
bcopy(&ch_array+128, buf, 128);是完全不同的。
发布于 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_array是char **型的。
ch_array + 128是&ch_array[128]的同义词。这不是&ch_array[128]的同义词。前者平均为128个字节到ch_array。后者意味着在ch_array地址之后有128个字符指针,这可能是某种随机的位置;在您的例子中,它甚至不是地址空间的一部分。
其次,如果您确实定义了ch_array[50],然后访问了128元素,那么您也需要一个SEGV。
https://stackoverflow.com/questions/16265852
复制相似问题