请解释 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
。
我编写了一个简单的 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
。