我了解指针工作原理的基础知识,但下面的示例让我感到困惑。
int *myNum = 10; // Produces an error
char *myChar = "Something"; // Works fine
为什么分配 char 有效但整数无效(可能是因为 char 被视为数组)?
还有,直接给指针变量赋值的时候我很困惑,它会自动获取地址吗?
char *myChar = "Something";
和
char myChar = "Something";
char *charAddr = &myChar;
这里有什么区别,或者等于?
最佳答案
"Something"
本质上是以下内容的缩写:
static const char some_hidden_array[] = {'S', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', '\0'};
some_hidden_array
也就是说,当您编写"Something"
时,编译器会在后台生成一个数组,并为您提供指向该数组开头的指针。由于这已经是一个指向 char 的指针,因此您可以毫无问题地将它分配给“指向 char 的指针”类型的变量(写为 char*
)。
10
不是类似的东西的缩写。它只是数字 10 - 它不是指向包含数字 10 或类似内容的数组的指针。
请注意,char
是一个单个字符,而不是一个字符串,这就是为什么字符串语法与大多数其他类型相比不同寻常的原因 - 一个字符串是 几个 字符,不只是一个。如果你尝试使用普通的旧 char
,你会看到同样的东西:
char *myChar = 'a'; // error
或任何其他类型:
float *myFloat = 42.1f; // error
换句话说,10
给出错误并不奇怪 - 如果有的话,"Something"
没有 也很奇怪。 (至少,在您了解字符串文字的工作原理之前,这很奇怪)
关于c++ - 定义char和int时指针有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977354/