C语言-指针辨析(一)
int num = 9;
int* p = #
printf("p = 0x%x\n",p);
printf("*p = 0x%x\n",*p);
printf("*&p = 0x%x\n",*&p);
printf("&*p = 0x%x\n",&*p);
p = 0x62fe1c
*p = 0x9
*&p = 0x62fe1c
&*p = 0x62fe1c
--------------------------------
Process exited after 0.01207 seconds with return value 0
请按任意键继续. . .
1.p与*p
p是一个地址
*p是地址内的数值
2.*&p
与&*p
p是一个地址即一个指针,&p:取地址p的地址即一个指向指针的指针。假设p的地址放在地址d,即d=p。故&p=*d=p。
*p是地址p存放的数,取这个数的地址自然是p,即&*p=&(*p)=p。
3.指针初始化
指针的功能就是指向某个数据,声明了指针而不定义,是会出问题的。计算机的逻辑是确定的,给它一个不确定的指针,它就会给你搞出些玄学的结果出来。
int* p = NULL;
/*Null是常量0,
这里也就是把指针指向了地址0x00,
但这个地址是一般无法访问的。
我认为这里应该是和编译器约定以NULL作为一个标记。
*/
int value = 100;
int* p =&value;//正确写法
int* p=value;//错误写法,p=value=100,谁知道地址100里放的是什么