1.int * p =NULL;和*p =NULL的区别
1 .int * p =NULL
int *p=NULL;
定义一个指针变量p,其指向的内存里面保存的是int类型的数据;再定义变量p的同时把p的值设置为0x00000000, 而不是把*p的值设置为0x00000000
2.*p =NULL
int i =10;
int * p =&i;
*p =NULL;
- int i = 10;
- int * p =&i;
- *p =NULL;
p指向的内存由原来的10变为了0; 而p本身的值(内存地址)没变
2.a和&a的区别
int a[5] = { 1,2,3,4,5 };int *ptr = (int *)(&a + 1);printf("%d,%d", *(a + 1), *(ptr - 1));
-
&a :a单独存在,为数组a的首地址
-
&a+1:a为数组的首地址,数组的首地址加上 (数组元素个数)
sizeof(int)即下个数组的首地址
所以两个数相差20个bite -
a:数组首元素地址a[0]
-
a+1:数组下一个元素的首地址
-
值相同意义不同
所以两个数相差4个bite -
(a+1):没有单独放在括号内部,降级变为首元素地址,
即为数组下一个元素首地址 -
(ptr-1):ptr指向的是a[5],并且ptr是int*型的,所以他减1指向a[4]