gpt4 book ai didi

c++ - 我是否正确理解了所有这些指针所指向的内容?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:37 24 4
gpt4 key购买 nike

我创建了一个程序,它创建了三个 C 字符串,然后是一个指针数组,其大小与我创建的 C 字符串的数量相同 (3),数组中的每个指针指向每个字符串的第一个字符三个字符串,最后是指向指针数组的指针(指向数组中的第一个指针)。

代码如下:

    int main() {
char arr1 [] = "hello";
char arr2 [] = "dear";
char arr3 [] = "world";

char* p1[3];
*p1 = arr1;
*(p1+1) = arr2;
*(p1+2) = arr3;
char** ptr = p1;
}

但是,当我做类似 std::cout << *ptr << std::endl; 的事情时我希望它只输出指针数组中第一个指针的地址。然而,它实际上打印出整个单词 "hello" ,这对我来说似乎很奇怪。我希望有一个地址,如果我输出 **ptr ,我希望它只打印出字母 "h" (实际上是这样做的)我没有正确理解某些东西吗?如果我做了同样的事情std::cout << *(ptr+1) ..我希望指针数组中第二个指针的地址p1 ,但它实际上打印出整个单词“亲爱的”。我迷路了..我想取消引用ptr会给我 p1 的地址,两次取消引用它会给我 p1 地址内的值.

最佳答案

如果你想打印出指针,你应该将它转换为空指针:

cout << (const void*) *ptr << endl;

因为 char * 实际上是旧式 C 字符串,并且有一个重载函数:

std::ostream& operator << (std::ostream&, const char *);

输出字符串而不是指针地址。对于其他指针,它应该可以正常工作。

关于c++ - 我是否正确理解了所有这些指针所指向的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18887681/

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