【问题标题】:Please explain char* return type in C++ [duplicate]请解释 C++ 中的 char* 返回类型 [重复]
【发布时间】:2021-01-02 10:58:45
【问题描述】:

我编写了一个简单的 C++ 代码,并且运行良好。但我不知道它是如何工作的。我只是使用myfun()"l" 替换为"r"myfun() 的返回类型是 char*。如果我返回&(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;
}

【问题讨论】:

  • 请注意,return &amp;(str[0]); 完全等于 return &amp;(*str);,这与 return str; 相同。

标签: c++ function pointers operator-overloading c-strings


【解决方案1】:

运算符

所以操作符输出传递的字符串的所有字符,直到遇到零字符'\0'

还要注意,表达式中使用的数组(具有罕见异常)会转换为指向其第一个元素的指针。

所以这个电话

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多