请解释 C++ 中的 char* return 类型

Please explain char* return type in C++

我编写了一个简单的 C++ 代码,并且运行良好。但我不知道它是如何工作的。我只是使用 myfun()"l" 替换为 "r"myfun() 的 return 类型是 char*。如果我returning &(str[0]),也就是只打印数组第一个元素的地址,那为什么要打印完整的字符串"herloworld"?请解释一下 return &(str[0]); 在做什么。

#include <iostream>
using namespace std;

char* myfun(char str[])
{
    str[2] = 'r';
    return &(str[0]);
}

int main()
{
    char str[] = "helloworld";
    char* word;
    word = myfun(str);
    cout << word;
}

运算符 << 为 char * 类型重载,这样它期望使用的 char * 类型指针指向字符串的第一个字符。

所以运算符输出传递的字符串的所有字符,直到遇到零字符'[=17=]'

另请注意,在极少数情况下,表达式中使用的数组会转换为指向其第一个元素的指针。

所以这个电话

word = myfun(str);

相当于

word = myfun( &str[0]);

另一方面,具有数组类型的函数参数被隐式调整为指向元素类型的指针。

所以这个函数声明

char* myfun(char str[]);

相当于下面的声明

char* myfun(char *str);

两个声明都声明了同一个函数。

并在函数内代替此 return 语句

return &(str[0]);

你可以写

return str;

对应的在main中可以这样写

cout << myfun(str);

没有声明和使用中间指针word