我在学习c ++时遇到了这种困惑:
int *a = 8 ;
这给出了一个错误,因为正如我所理解的那样,我试图将一个整数设置为一个指针,这是一个内存位置。但是,
const char *name = "name";
工作得很好吗?我没有得到它,因为名称应该是十六进制的内存位置,但我试图将其设置为一系列字符。
答案 0 :(得分:3)
您的案例中的字符串文字"name"
的类型为const char[]
。数组可以衰减到指针,这是在这种情况下发生的事情。然后该指针将指向数组中的第一个元素。请注意,由于C ++ 11分配给char*
而不是const char*
(因此需要转换)是非法的,所以始终使用const char*
来表示字符串文字,或者更好,std::string
。
8
的类型为int
,它没有转换为数组所具有的指针类型。
答案 1 :(得分:0)
int*
和char*
的规则相同。但是,您将苹果与橙子进行比较。
你不能为其指针分配相应类型的值(这里是否有const
并不重要;我做了const
为了与下一个重要的例子保持一致):
int const* ip = 8; // ERROR
char const* cp = ‘8’; // ERROR
阵列在最轻微的机会下衰减指针。字符串文字是char const[N]
类型的数组,其中N
是字符串文字中char
的数量,包括终止空char
。
int ia[] = { 8 };
char ca[] = { ‘8’ };
int const* ip = ia; // OK
char const* cp = ca; // OK
char const* lp = “8”; // OK