【发布时间】:2019-07-17 00:55:17
【问题描述】:
我对下面的代码有几个问题。
- 如果我有某种类型的指针,那么对它使用数组索引意味着什么?在这个例子中,
ptr[3]代表什么(ptr 是某种类型的指针)? -
程序的输出应该是
to be or not to be (Hamlet),但我不知道为什么,我的问题是(&ptr2)[3] = str这行,我不明白这行如何改变ptr1的第三个元素数组。int main() { char str[] = "hmmmm..."; const char *const ptr1[] = {"to be", "or not to be", "that is the question"}; char *ptr2 = "that is the question"; (&ptr2)[3] = str; strcpy(str, "(Hamlet)"); for (int i = 0; i < sizeof(ptr1) / sizeof(*ptr1); ++i) { printf("%s ", ptr1[i]); } return 0; }
使用this 可视化器,我们可以看到ptr1 将指向str,我只是不明白为什么会这样。
帮助表示赞赏。
【问题讨论】:
-
知道
ptr[3]的语法与*(ptr + 3)完全相同可能会有所帮助。 -
您应该阅读有关数组和指针的教程。
-
ptr[3]将通过将3*sizeof(datatype)添加到指针基址并取消引用它来访问数组的第四个元素(注意第一个元素始终是0,而不是1)。 -
@0x5453 仅当数组的类型是 1 字节大小的类型时才适用(例如
char),它不适用于例如int(如果您使用的不是 8 位 CPU) -
这个duplicates the code in yesterday’s question 虽然这个用户提出了不同的问题。
标签: c arrays pointers data-segment