c++的问题。 int* p =1 报错 是为什么

int* p =1 报错
char* p = "hello" 正常

请问能详细解释下么?

int *p是声明p是一个指针,指针中所存放的应该是一个内存地址。而1是一个常数不是地址,所以报错。

而"hello"是一个字符串,在c语言中就是字符数组,"hello"字符数组返回的就是这个数组的首地址,自然可以存放在指针中。

int *p说明p是一个指针,不能直接把1赋值给p,可以使用如下方法:
int p; p = 1;//这样才是把1赋值给p所指向的int值。
char
p,说明p是一个字符指针,后面的"hello"是一个字符串,可以理解为一个字符数组,可以直接让p等于这个数组的首地址,相当于:
char buf[] = "hello"; int *p = buf;

char* p = "hello","hello"字符实际上存储在常量区,是有地址的,所以可以;
而int* p =1,1并没有实际地址,那么指向1,p就是野指针了,所以不行。

int* p 表示的是指向整型的一个指针,名字是p,而指针赋值是要指向对应的一个内存地址,这个内存地址里面存放的是整型数值,而单独的1是一个数值而不是一个地址;所以错误

char* p 表示的是指向字符的一个指针,名字是p,而指针赋值是要指向对应的一个内存地址,这个内存地址里面存放的是字符数值,而"hello"是一个字符串,字符串可以看作是一个字符数组,char* p= "hello",意思是p指向了hello字符串所在的内存地址这么一个指针;里面的值对应的就是hello字符。所以就正常