int * p =NULL;和*p =NULL的區別a和&a的區別
阿新 • • 發佈:2018-12-10
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]