这段代码,数组和指针的输出是什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这段代码,数组和指针的输出是什么相关的知识,希望对你有一定的参考价值。
我对以下代码有几个问题。
- 如果我有一个类型的指针,使用数组索引是什么意思?在这个例子中,
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
没有任何改变。它试图访问未知的内存位置。
如果你被告知这个程序的输出应该是“成为或不成为(哈姆雷特)”,你被告知错了。
以上是关于这段代码,数组和指针的输出是什么的主要内容,如果未能解决你的问题,请参考以下文章