c++ - 定义char和int时指针有什么区别?

标签 c++ pointers

我了解指针工作原理的基础知识,但下面的示例让我感到困惑。

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/

相关文章:

c++ - 如何在 std::function 中存储虚拟成员函数?

c++ - 什么时候私有(private)构造函数不是私有(private)构造函数?

c++ - 无法将‘void (myClass::*)() 转换为 void (*)()

c++ - 我需要在C++中的两个字符串之间找到通用前缀

c - 指向 char 到 char 数组的指针

我可以拦截 C 中的全局指针初始化吗?

java - Java有指针吗?如果是,如何操纵它们?

c - 涉及指针的意外 C 行为

c++ - VS2005 : How to compile projects as if it was VS6?

c - 如何使用C中的指针将十六进制转换为二进制