1. Int *point=5; 这种写法是不对的,但是 int *point=&a; 这种写法是正确的 。可以写成int *point=(int*)5;
2. int *point =&a; *point 代表这是一种指针型变量,变量名是point ,int *point=&a 意识是将a 的地址取出来,给point ,( 我觉得 可以将int* 看做一种数据类型,point看做变量)。
而&a 和 ;printf("%d",*point);可以看做一种逆运算, *point意味着将point 的值当做地址,然后将这个地址里的值取出来。&a 意味着将a 这个元素的地址取出来。例如:
int *a=&b; //这是标准语法,等号左边是指针型变量,等号右边是数据地址
int *a; *a=5; //这句话编译没问题,运行出错,会报warning C4700: local variable 'point_1' used without having been initialized 这个警告,原因在于,在给初始化*a 的时候,也就是 int *a; 这一句,没有给a确切的地址,这导致*a 指向随机内存,这个时候 *a=5; 代表着 将5 赋给*a指向的内存区域 ,环境不知道将5放到哪里。
int *a; a=&k; *a=5; //这句话就是上一段代码的补充, 先将a初始化。然后将a指向 k在内存中的地址。最后,将5赋给a所在的地址中,就是赋给k .
3. 切记要搞清楚赋值语句左右的内容,以及数据类型,例如:
int *a, *b; int c=100,d=200;
a=&c; b=&d;
*a=50; //这句话对,将50 赋给 a 指向的内存区域,也就是c
*b=&c; *a=&d; //这句话错,原因在于 *b 的数据类型是int 而 &c的数据类型是地址