指針數組
數組是一種類型的數的集合
整型數組的元素都是int類型
指針數組的元素都是指針變量
int* arr1[10];//整型指針的數組char*arr2[10];//一級字符指針的數組char** arr3[5];//二級字符指針的數組
參考這一份示意圖

示例1:定義多個字符指針
在上一站的字符指針里面,提到了可以直接用指針來創建一個常量字符串
同理,我們可以將多個指針放在一塊,湊成指針數組,一次性創建多個指向常量字符串的指針

int main(){char* arr[] = { "abcdef", "qwer", "zhangsan" };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);for (i = 0; i < sz; i++){printf("%s ", arr[i]);}return 0;}
示例2:存放數組名的數組
在之前的學習中,我們知道:數組名代表數組首元素的地址
可以說,數組名本質上也是一個指針
既然是指針,就能放進指針數組里面
int main(){int arr1[] = { 1,2,3,4,5 };int arr2[] = { 2,3,4,5,6 };int arr3[] = { 3,4,5,6,7 };int* arr[] = {arr1, arr2, arr3};//arr是指針數組int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 5; j++){printf("%d ", arr[i][j]);//*(*(arr+i)+j)}printf(" ");}return 0;}
這串代碼中,我們需要了解的是arr[i][j]和*(*(arr+i)+j)之間的關系
以下內容若有錯誤,還請大家在評論區指正!
arr[i][j]和*(*(arr+i)+j)
它們都是訪問數組的形式,用到了不同的操作符但表達的含義相同:下標為i、j的元素
在內存中,數據的存儲是連續的
創建一個二維數組,可以看到兩行的數據是連續存放在數組里面的
int arr4[2][2]={{1,2},{3,4}};
既然是連續的,我們就可以用指針++的形式來訪問二維數組里面的所有元素
*(arr+i)指向第i行元素*(arr+i)+j指向第i行下標為j的元素的地址*(*(arr+i)+j)再次解引用,得到j元素
數組名的本質是地址,是該數組首元素的地址
二維數組的首元素是第一行,數組名arr就是第一行的地址
我們可以把二維數組的每一行理解為獨立的一個一維數組
這時候,二維數組的形式和上述代碼中int* arr[]數組的形式就相同了
int arr1[] = { 1,2,3,4,5 };int arr2[] = { 2,3,4,5,6 };int arr3[] = { 3,4,5,6,7 };//arr1 arr2 arr3是二維數組里面的每一行int* arr[] = {arr1, arr2, arr3};//arr等價于一個二維數組,但有不同
int* arr[]和二維數組的不同
int*arr數組里的元素arr1,arr2,arr3的地址是連續存放的
這里設計到一個新概念:數組指針
將在下一節講解!

但是它們對應的各自的數組內數據并不連續
如:arr1和arr2這兩個數組各自元素的地址并不連續

示例3:存放二級指針的數組
既然一級指針可以放進數組里,二級指針也是指針,同樣也能塞進數組里
下面這串代碼里面的arr2就是一個存放二級指針的數組
int main(){int a = 10;int* p = &a;int** pp = &p;int** arr2[4] = {pp};return 0;}
你學會了嗎?下次給大家分享數組指針哦!
審核編輯:湯梓紅
-
指針
+關注
關注
1文章
484瀏覽量
71843 -
數組
+關注
關注
1文章
420瀏覽量
27351
原文標題:【C語言】指針進階第二站:指針數組!
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
C語言中指針與數組
指針數組的示例說明
評論