-3

我对下面的代码有几个问题。

  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;
    }
    

使用这个可视化工具,我们可以看到 ptr1 将指向 str,我只是不明白为什么会这样。

帮助表示赞赏。

4

1 回答 1

2

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

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

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

该行(&ptr2)[3]不会改变str1. 它试图访问一个未知的内存位置。

如果你被告知这个程序的输出应该是“to be or not to be (Hamlet)”,你被告知错了。

于 2019-02-22T21:31:17.657 回答