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]