指針學習筆記(4)——指針與數組

指針變量

要點

1.任何指針變量佔用的空間都是4個字節(32位機)

2.任何指針變量加1是使它指向下一個元素的地址

測試程序

void test_1()
{
	char c;
	int i;
	long l;
	float f;
	double d;

	char *pc = &c;
	int *pi = &i;
	long *pl = &l;
	float *pf = &f;
	double *pd = &d;

	printf("%d\t%x\t%x\n", sizeof(pc), pc, pc + 1);
	printf("%d\t%x\t%x\n", sizeof(pi), pi, pi + 1);
	printf("%d\t%x\t%x\n", sizeof(pl), pl, pl + 1);
	printf("%d\t%x\t%x\n", sizeof(pf), pf, pf + 1);
	printf("%d\t%x\t%x\n", sizeof(pd), pd, pd + 1);
}

運行結果

指針與一維數組

要點

1. 數組名a指向的是數組首元素地址

2. &a指向的纔是數組的首地址

3. a[n]內部處理就相當於*(a+n)

測試程序

void test_2()
{
	char a[5]={0,1,2,3,4};

	printf("%d\t%d\n",&a,&a+1);
	printf("%d\t%d\n",a,a+1);
	printf("%d\t%d\n",a[1],*(a+1));
}

運行結果


指針與二維數組

要點

1. 二維數組可以看成是一維數組中的每一個元素又是一個一維數組

2. 二維數組名指向的是數組首元素的地址,即行地址

3. 對行地址前加*就轉換爲列地址

4. 對列地址前加&就轉換爲行地址

5. &a纔是二維數組的首地址

6. a[n][m]就相當於*(*(a+n)+m)

測試程序

void test_3()
{
	char a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

	printf("%d\t%d\n",&a,&a+1);
	printf("%d\t%d\n",a,a+1);
	printf("%d\t%d\n",*a,*a+1);
	printf("%d\t%d\n",a[0],a[0]+1);
	printf("%d\t%d\n",&a[0],&a[0]+1);
	printf("%d\t%d\n",a[1][2],*(*(a+1)+2));
}

運行結果





 《C語言程序設計》


發佈了30 篇原創文章 · 獲贊 16 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章