当我输入int * a = 10
时,它会显示错误。但是当我提供char *b = "hello"
时,它没有显示错误?
我们无法直接将值初始化为指针,但只能在char
中实现。如何在字符指针中分配值?
答案 0 :(得分:8)
"hello"
的类型是char
数组,decays指向char
指针。因此,您可以使用它来初始化char*
类型的变量。
10
的类型为int
。它不能隐式转换为int*
,因此int *a = 10
无效。以下可能是与int
示例最接近的char
:
int arr[] = {1, 2, 3};
int *a = arr;
(此处还存在constness的问题,我不是为了简单起见而解决这个问题。如果您想了解更多内容,请参阅this question。)
答案 1 :(得分:6)
这是因为"hello"
是字符串文字,代表array
char
。 array
的起始地址已分配给作业b
中的指针char *b = "hello"
。
10
是类型{{1}的值并且无法分配给int
的指针。
答案 2 :(得分:3)
C ++中字符串文字的类型为char const[6]
,C中为char[6]
(它是文字中的字符数,包括终止NUL字符)。
虽然char *b = "hello";
在C中是合法的,但它在C ++ 03中已弃用,在C ++ 11中是非法的。你必须写char const *b = "hello";
之所以有效,是因为两种语言都将数组类型的隐式转换定义为指向数组第一个元素的指针。这通常被称为数组的衰减。
此类转换不适用于int *a = 10;
,因此无法使用这两种语言。