gpt4 book ai didi

c++ - 指向指针的字符指针

转载 作者:搜寻专家 更新时间:2023-10-31 01:08:44 24 4
gpt4 key购买 nike

我正在尝试绕过指向指针的指针。我对此感到困惑

int syntax_error(int num) {
cout << num << endl;
static char *err[] = {
"Cannot open\n",
"I can open\n",
"Sorry\n",
"Thank you\n"
 };

printf("%s", err[num]);

cout<<"&err[num][1]"<<" "<<&err[num][1]<<endl;
cout<<"&err[num]"<<" "<<&err[num]<<endl;
cout<<"err[num][1]"<<" "<<err[num][1]<<endl;
cout<<"*err[num]"<<" "<<*err[num]<<endl;

return 0;
}

假设num = 3。然后产生了以下输出

   Thank you
&err[num][1] hank you
&err[num] 0x8049ca4
err[num][1] h
*err[num] T

我读到&运算符指向它所指向的指针的地址。这里它不应该返回 err[num][1] 的地址而不是从那里存储到结束的内容。另一方面,&[num] 返回地址。我在这里很困惑。如果有人能提供帮助,我们将不胜感激。

问题重新编辑: & 运算符应引用地址。所以 &err[num][1] 应该返回一个地址。这里它给出了从 err[3][1] 开始的字符串。另一方面,&err[num] 返回一个地址。那么为什么会混淆

最佳答案

[] 不是一个独立的操作符,它的定义如下:

a[b] == *(a + b)

如果重写表达式,您将很快开始理解正在发生的事情:

&err[num][1] == &(*(*(err + num) + 1)) == *(err + num) + 1

这是指向特定字符串中第二个字符的char *指针。

&err[num] == &(*(err + num)) == err + num

这是指向外部数组的 char ** 指针。

cout 知道如何打印 C 字符串 char* 而不是 char** 指针,所以它只打印指针值。

注意:混合使用 C 和 C++ I/O 通常不是一个好主意。

关于c++ - 指向指针的字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com