这段代码,数组和指针的输出是什么

问题描述 投票:-3回答:1

我对以下代码有几个问题。

  1. 如果我有一个类型的指针,使用数组索引是什么意思?在这个例子中,ptr[3]代表什么(ptr是某种类型的指针)?
  2. 该程序的输出应该是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,我只是不明白为什么会发生这种情况。

帮助赞赏。

c arrays pointers data-segment
1个回答
2
投票

如果我有一个类型的指针,使用数组索引是什么意思?在这个例子中,ptr [3]代表什么(ptr是某种类型的指针)?

在C中,a[i]*(a + i)的语法糖。这是指针的有效语法,即使它们没有指向数组。

该程序的输出应该是或不是(哈姆雷特),但我不知道为什么,我的问题是线(&ptr2)[3] = str,我不明白这条线如何变化ptr1数组的第三个元素。

线(&ptr2)[3]str1没有任何改变。它试图访问未知的内存位置。

如果你被告知这个程序的输出应该是“成为或不成为(哈姆雷特)”,你被告知错了。

© www.soinside.com 2019 - 2024. All rights reserved.