我对以下代码有几个问题。
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是某种类型的指针)?
在C中,a[i]
是*(a + i)
的语法糖。这是指针的有效语法,即使它们没有指向数组。
该程序的输出应该是或不是(哈姆雷特),但我不知道为什么,我的问题是线(&ptr2)[3] = str,我不明白这条线如何变化ptr1数组的第三个元素。
线(&ptr2)[3]
在str1
没有任何改变。它试图访问未知的内存位置。
如果你被告知这个程序的输出应该是“成为或不成为(哈姆雷特)”,你被告知错了。