1. 程式人生 > >指標,二級指標,指標陣列與陣列指標 練習day—17

指標,二級指標,指標陣列與陣列指標 練習day—17

1.指標

1)指標就是個變數,用來存放地址,地址唯一標識一塊記憶體空間; 2)指標的大小是固定的4(8)個位元組(32(64)位平臺); 3)指標是有型別的,指標的型別決定了指標的+/-整數的步長,指標解引用操作時的許可權;

int main()
{
	int a = 1;
	int* pa = &a;
	*pa = 2;
	printf("%p\n",&a);
	printf("%p\n",pa);
	printf("%d\n",a);
	return 0;
}

執行結果如下 畫圖理解

2.二級指標

由於指標變數也是變數,是變數就有地址,那麼一級指標變數的地址就是二級指標。

int main()
{
	int a = 10;
	int* pa = &a;
	int** ppa = &pa;
	**ppa = 30;//等價於 *pa=30;/ a=30;
	printf("%d\n",a);   //30
	*pa = 20;
	printf("%d\n",a);   //20
	return 0;
}

畫圖理解 在這裡插入圖片描述 在這裡插入圖片描述

3.指標陣列與陣列指標

1)指標陣列: int * p1[10] 由於[]的優先順序高於*,所以p1先於[10]結合成為陣列,陣列的元素型別為int* ; 指標陣列是陣列, 陣列的每個元素都是指標; 2)陣列指標: int (* p2)[10] 由於()的優先順序高於[],所以p先和*結合,說明p是一個指標變數,指向一個大小為10的整型陣列 ; 指標陣列是指標, 能夠指向一個數組;

int main()
{
	int a[5] = {1,2,3,4,5};
	//pa1為指標陣列,陣列的每個元素為a陣列元素的地址
	int* pa1[5] = {&a[0],&a[1],&a[2],&a[3],&a[4]};
	//pa2為陣列指標,指標指向陣列a
	int (*pa2)[5] = &a;
	return 0;
}

讓我們練習下,解釋下面程式碼的意思

	int arr[5];         //長度為5的整型陣列
	int* parr1[10];     //parr1為指標陣列,陣列大小為10,元素型別是指向整型的指標
	int (*parr2)[10];   //parr2為陣列指標,指標指向一個大小為10的整型陣列
	int (*parr3[10])[5];//parr3為陣列,陣列大小為5
	                    //元素型別是:大小為10且元素型別是指向整型的指標的指標陣列