gpt4 book ai didi

c++ - 简单的C++指针混淆

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:59 26 4
gpt4 key购买 nike

void changeStr(char *str)
{
str = "D";
}

void changeStr(char **str)
{
*str = "S";
}

char str[] = "Good";
changeStr(str);
cout<<str<<endl;
char *p = str;
//*p = 'j';
changeStr(&p);
cout<<str<<endl;

我只是尝试更改 str[] 数组的值。恕不返回!

我认为第一个changeStr只是传入了str的指针,并改变了那个值,但实际上并没有改变它。

第二个我用了pointer of pointer还是不行。

最佳答案

让我们一步一步来。

char str[] = "Good";

您正在创建一个字符数组,长度为 5 个字符,内容如下:

{ 'G', 'o', 'o', 'd', '\0' }

changeStr(str);

在这里,您将该数组传递给一个函数。由于数组会衰减为指针,因此此调用完全没问题。

void changeStr(char *str)
{
str = "D";
}

现在,第一个问题来了。您可能混淆了 "D"'D'。如果您想更改数组中的第一个字符,您需要按以下方式进行:

str[0] = 'D';

这会很好用。更改指针不会做任何事情,因为它是一个局部变量,保存指向数组开头的指针,而不是数组本身。如果您只想用 { 'D', '\0' } 替换数组的全部内容,则需要使用 strcpy

strcpy(str,"D");

现在,让我们检查最后一部分。在这里你把事情搞混了。

char *p = str;
changeStr(&p);

您正在创建一个指向数组开头的新变量,并将指向该变量的指针传递给下一个函数。

void changeStr(char **str)
{
*str = "S";
}

这确实改变了传递的原始变量,但请记住,这是 p 而不是数组。您所做的是更改 p 指向的位置。它现在指向常量 "S"

关于c++ - 简单的C++指针混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13340415/

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