这个指针的 声明 和赋值是不对的吗 麻烦教教我

图片说明

你声明的指针是不对的,在声明指针的时候必须要给指针赋值,可为NULL,不让此指针为野指针,
给指针赋值的时候是取值的地址,带 * 号赋值的时候可以为值

 int love = 3;
 int *P_love = &love;

肯定是不对的,你这个指针都没有初始化,指针的内容是为空的,你输出指针内容当然会报错了

你那个代码只声明了一个 *p_love 的指针,没有初始化

图片说明全局变量又是这个样子的

1.只声明、没赋值过的指针都是野指针,初始化就是第一次赋值。能赋给指针的,只要是可以解释为地址的数值都可以。
2.只有对P_love 人为进行赋值后,P_love的值才可控,特别的,对P_love 的第一次人为赋值,称为初始化。
3.为了防止错误定义的时候就该初始化。

P_love未赋值
可以这样写
int love = 3;
int *p_love;
p_love = &love;

错误提示是使用了未初始化的局部变量P_love,修改如下:
在int love=3;这条语句的下面加一条语句:P_love=&love; //将变量love的地址赋值给指针变量P_love

将其中的 int *p_love; int love=3;改成 int love=3;int * p_love = &love;

这是因为你所定义的指针变量P_love是在main()外面定义的,因此它是全局指针变量,系统默认初始化为NULL,*P_love是读取地址值为NULL的内存空间的值,
其实NULL是一个宏定义,#define NULL 0,*P_love是读取地址值为0的内存空间的值,系统提示读取访问权限冲突的异常提醒,就是说你的应用程序没有权限
去读取这个地址的数据值,提示异常错误。

你写错了啊,是P_love,而不是p_love,注意大小写啊。

图片说明 改了之后 又是这样子了

你的指针只声明了,但没有指向任何一个内存地址,而你又想打印出它的值,这样十分危险,所以编译器会报错