++++++++++示例程式
++++++++++
#includevoid main()
;int i,j;
//用陣列名做指標輸出資料
//第一種方式
printf("%s\n",m);
//第二種方式
for(i=0;m[i]!='\0';i++)
printf("%c",*(m+i)); 【注意點1】
printf("\n");
//通過定義指標型變數輸出
char *p=m;//將陣列首位址賦給指標變數p
//第一種方式
printf("%s\n",p);
//第二種方式
for(i=0;m[i]!='\0';i++)
printf("%c",*p++); /* 這裡的*p++也可以寫成*(p+i) */ 【注意點2】
printf("\n");
}
重點知識概括與總結:由【注意點1】和【注意點2】對比我們可以發現乙個陣列方面的知識點。和在c語言中,陣列名是乙個位址常量
,不能對這進行賦值和自增自減運算,由陣列名代表它的首位址。所以在【注意點1】那塊我們不能將*(m+i)替換為
*m++。
一、指標與二維陣列
++++++++++示例程式
++++++++++
#includevoid main()
,,};
//用陣列名做指標輸出
//第一種方式
for(int i=0;i<3;i++)
printf("%s\n",m+i); /* 這裡的m[i],也可以寫成m+i */ 【注意點3】
//第二種方式
for(i=0;i<3;i++)
}
重點知識概括與總結:必須注意的是對二維及以上字元型陣列來說,每個最小行單位必須留出最後乙個空位置留給』\0』,對其它型別的字元型陣列和int型陣列則無此規則。
在二維陣列中無法通過定義乙個指標型變數*p來指向二維陣列首行首列位址對這個陣列進行輸出,如以下輸出做法則為錯。
char *p=&m[0][0];
for(i=0;i<3;i++)
printf("%s\n",p+i);
上邊的p+i無法與示例程式中的【注意點
3】等價,這裡的
p+i只能對陣列首行進行操作,如printf("%s\n",p+i);當i=0時,
會列印出二維陣列的首行所有元素。i=1時從首行第二個元素開始列印,到最後乙個元素停止列印。
for(i=0;i<3;i++)
for(int j=0;m[i][j]!='\0';j++)
printf("%s\n",*(*(p+i)+j));
printf("\n");
這裡的輸出方式則是完全錯誤的,當然將*(*(p+i)+j)換做*(p[i]+j)也不能成立
。
一維陣列,二維陣列與指標
陣列與指標間的三條規則 陣列名是指向陣列首元素的指標。e相當於給e公升了一階。int a 4 a 0 本身是乙個值,a 0 是乙個位址,公升階大概就是這個意思 e相當於給e降了一階。降階相當於把乙個指標降為值,a 0 是乙個位址,a 0 就成為了值 以上內容來自北京大學 c程式設計高階 一維陣列與指...
二維陣列與二維指標
1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...
二維陣列與二維指標
一.指標與二維陣列 以martix 3 4 為例 1.二維陣列的本質 int martix 3 4 int martix 3 4 int 4 martix 3 令int 4 為type,type martix 3 為含有三個元素的陣列,每乙個元素型別為int 4 int 4 是乙個擁有4個int型別...