程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++逆天語法系列之二維數組

C++逆天語法系列之二維數組

編輯:C++入門知識

C++逆天語法系列之二維數組


某公司的筆試題,自己分析得出的答案,並在後面對二維數組元素表示形式做出總結。新手朋友別嫌啰嗦,耐心看完並記住對你會有幫助的。老鳥們也歡迎來提意見。


	int a[4][4] = {
		{1,2,3,4},
		{50,60,70,80},
		{900,1000,1100,1200},
		{13000,14000,15000,16000}
	};
	int (*p1)[4] = a;
	int (*p2)[4] = &a[0];
	int *p3 = &a[0][0];

	printf("%d, %d, %d, %d\n",
		*(*(a+1)-1),
		*(*(p1+3)-2)+1,
		*(*(p2-1)+16)+2,
		*(p3+sizeof(p1)-3)
		);

64位環境,問上述代碼的運行結果。


好吧來分析,首先二維數組名指向的是二維數組的首行地址,

int(*p1)[4]=a,是一個指向四個整型數組的指針;

int *p3=&a[0][0],將二維數組按一維數組的方式引用;

第一個輸出:a+1即第二行的地址,*(a+1)即第二行的第一個元素的地址,再減一是它前面的元素地址,即第一行第四個元素,結果為4.

第二個輸出:p1和p2和a是一樣的,p1+3即第四行的地址,*(p1+3)即第四行第一個元素的地址,再減二則是第三行第三個元素的地址,結果為1101。

第三個輸出:p2-1為第四行地址,*(p2-1)表示第四行第一個元素地址,加上16即繞一圈還是這個元素,結果為13002。

第四個輸出:64位環境,則sizeof(p1)是8,p3+5表示一維數組第五個元素,即二維數組第二行第二個元素,結果為60。


嗯來做個總結吧:

二維數組元素a[i][j]有下面幾種引用形式:

*(a[i]+j) //a[i]為數組第i行地址,再加j即為數組第i行j列地址

*(*(a+i)+j) //a+i為數組第i行地址,*(a+i)為數組第i行0列地址,再加j即為第i行j列地址


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved