C++ 中的 a可以char*
接收字符串作为参数吗?如果是这样,这是如何工作的。
例子:
myfunc("hello"); //call
myfunc(char * c)
{ ...
}
字符与字符串的关系究竟如何?
字面量的类型"hello"
是const char[6]
,即一个字符数组,其中包含字符串空间和空终止字节。
C++ 允许在传递函数参数时将其转换为另一种类型。在这种情况下,数组类型被转换为指针类型,const char *
,指针引用第一个具有 value 的字符'h'
。
C++03 允许转换为char *
,删除const
,但实际修改字符串是未定义的行为。这样做是为了与老式 C 兼容,并在新的 C++11 标准中被撤销,因此您的示例不会通过更新的编译器。
顺便说一句,由于继承自 C 的遗留问题,如果将函数声明为myfunc(char c[6])
. 的类型c
仍然是char *
.
在您的示例中,它不会按预期工作。以这种方式使用字符串(指向开始字符的指针)仅在字符串为空终止时才有效。这就是旧 c_str 的工作方式。如果我们有对第一个字符的引用,我们可以迭代直到找到终止字符“\0”来访问整个字符串。