【发布时间】:2015-06-03 15:43:35
【问题描述】:
大家好,请看一下这段代码。
class person
{
char name[20];
float age;
public:
person(char *s,float a)
{
strcpy(name,s);
age=a;
}
};
int main()
{
person P1("John",37.50);
person p2("Ahmed",29.0);
}
所以在这个类中,参数化构造函数将一个字符指针作为参数,然后将其传递给 strcpy 函数,该函数将字符串复制到字符数组名称。 如果有整数数组,如 int arr[10]; 那么 arr 是指向第一个元素的指针。 如果有一个字符数组是一个字符串,比如 字符 str[]="你好"; 那么 str 是指向第一个元素的指针,在这种情况下是 h。那么我们不应该将 str 之类的东西传递给构造函数吗?为什么我们将字符数组元素(如“john”、“ahmed”)传递给构造函数。 我们不应该这样做—— 字符 str[]="艾哈迈德"; 人 p1=(str,23);
【问题讨论】:
-
数组衰减为指针,所以它们是一样的
-
这是无效的 C++11。不再允许将字符串文字转换为
char*。如果需要 C 字符串,s应该是const char *。 -
既然这应该是 C++ 那你为什么不使用 C++
std::strings呢? Old skool C 弦乐 (char *) 是一个痛苦的世界。 -
在
char str[] = "Hello";中,str是一个数组;一个包含"Hello"元素的副本。它不是指针,尤其不是指向"Hello"的第一个元素。无论您是以字符串文字的形式传递数组还是以任何其他数组的形式传递数组,它们都会衰减为指向第一个元素的指针。