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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这段代码,数组和指针的输出是什么相关的知识,希望对你有一定的参考价值。

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

  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,我只是不明白为什么会发生这种情况。

帮助赞赏。

答案

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

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

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

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

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

以上是关于这段代码,数组和指针的输出是什么的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码输出这么多数字? [复制]

如何通过带有指针的函数传递 char 变量(示例已发送)?

为啥这段代码会泄露? (简单的代码片段)

对 C 字符串数组使用简单的 void 指针

c语言 这段代码是啥意思,结果为啥是20,20

C语言结构体里的成员数组和指针