1. 程式人生 > >int * p =NULL;和*p =NULL的區別a和&a的區別

int * p =NULL;和*p =NULL的區別a和&a的區別

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 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]