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]
本文详细解析了C/C++中指针的初始化及其与数组之间的区别,包括如何正确使用NULL值来初始化指针,以及*a与int *p = NULL的区别。同时介绍了数组名与指向数组的指针之间的联系和区别。

被折叠的 条评论
为什么被折叠?



