【发布时间】:2016-07-06 21:59:19
【问题描述】:
在为int 数据类型创建指针数组时,以下代码有效:
int var[] = {10, 100, 200, 1000};
int *ptr[] = {&var[0], &var[1], &var[2], &var[3]};
在为char 数据类型创建指针数组时,以下是合法的:
char *names[] = {"Mathew Emerson", "Bob Jackson"};
但如果我为int 数据类型创建一个指针数组,如下所示:
int var[] = {10, 100, 200, 1000};
int *ptr[] = {var[0], var[1], var[2], var[3]};
我得到一个编译器错误。我理解为什么在上述int 数据类型数组的声明方法中出现编译错误,因为 var[i] 不是对指针必须指向的变量的引用,即它的地址,但不应该t 在我的 char 指针数组的声明中,同样的逻辑也会出错。
它在char 指针数组中可以接受的原因是什么?
“字符串值”是指针可以指向的地址还是只是一个常量字符串值。
【问题讨论】:
-
旁注:有些人认为
var + 3比&var[3]更好。 -
编译器将代码中出现的每一个带引号的字符序列(又名字符串文字)替换为您的代码正在执行的二进制映像中该序列的地址编译成。
-
@barak manos 所以每次将字符串分配给某个变量时,它的功能取决于变量的数据类型?如果变量是字符串类型,则分配实际值,如果变量是 char* 类型,则将字符串的地址分配给它?例如:char *str = "好"; cout
-
@Natsu:如果变量类型是
std::string,那么std::string类的构造函数会用那个指针调用,并将指向的数据复制到调用对象中。