long *p3=352; //wrong!!
change to
long *p3;
*p3=352; //still wrong!!
*p3=352; //still wrong!!
change to
long a;
long * p3=&a; //等价于 long * p3; p3=&a;
*p3=352;
******************************************************************
long * p3=&a; //等价于 long * p3; p3=&a;
*p3=352;
******************************************************************
你要注意指针概念,什么时候是[声明],什么时候是[取]指针指向变量,这点一定要搞清楚。
long *p=352
//你在 [声明] 一个指针并且初始化,一个指针存放的应该是一个地址,而352是个整数,类型
//不一样,能编译通过吗?
long* p3;//你在[声明]一个指针,但是没有初始化,他就随机指向某个地址,所以这样的情况
//对于c/c++是十分危险的,编译器一般会有警告,作为程序员应该注意这点,建议初始化一下。
*p3 =352;//你在[取]指针p3所指向的整型变量,并对其赋值352
long *p=352
//你在 [声明] 一个指针并且初始化,一个指针存放的应该是一个地址,而352是个整数,类型
//不一样,能编译通过吗?
long* p3;//你在[声明]一个指针,但是没有初始化,他就随机指向某个地址,所以这样的情况
//对于c/c++是十分危险的,编译器一般会有警告,作为程序员应该注意这点,建议初始化一下。
*p3 =352;//你在[取]指针p3所指向的整型变量,并对其赋值352
*********************************************************************
long *p3;
*p3=352;
这段代码编译没错,向p3指向的地址中放入352这个数,但是p3的值没有初始化,它指向的地址不确定,所以p3现在是野指针,运行时也可能程序崩溃。总之,p3和*p3是不一样的。
可以这样:
long a;
long * p3=&a; //等价于 long * p3; p3=&a;
*p3=352;
这时*p3和a都是352了。
*p3=352;
这段代码编译没错,向p3指向的地址中放入352这个数,但是p3的值没有初始化,它指向的地址不确定,所以p3现在是野指针,运行时也可能程序崩溃。总之,p3和*p3是不一样的。
可以这样:
long a;
long * p3=&a; //等价于 long * p3; p3=&a;
*p3=352;
这时*p3和a都是352了。