指針數(shù)組
數(shù)組是一種類(lèi)型的數(shù)的集合
整型數(shù)組的元素都是int類(lèi)型
指針數(shù)組的元素都是指針變量
int* arr1[10];//整型指針的數(shù)組
char*arr2[10];//一級(jí)字符指針的數(shù)組
char** arr3[5];//二級(jí)字符指針的數(shù)組
參考這一份示意圖
示例1:定義多個(gè)字符指針
在上一站的字符指針里面,提到了可以直接用指針來(lái)創(chuàng)建一個(gè)常量字符串
同理,我們可以將多個(gè)指針?lè)旁谝粔K,湊成指針數(shù)組,一次性創(chuàng)建多個(gè)指向常量字符串的指針
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:存放數(shù)組名的數(shù)組
在之前的學(xué)習(xí)中,我們知道:數(shù)組名代表數(shù)組首元素的地址
可以說(shuō),數(shù)組名本質(zhì)上也是一個(gè)指針
既然是指針,就能放進(jìn)指針數(shù)組里面
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是指針數(shù)組
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)之間的關(guān)系
以下內(nèi)容若有錯(cuò)誤,還請(qǐng)大家在評(píng)論區(qū)指正!
arr[i][j]和*(*(arr+i)+j)
它們都是訪問(wèn)數(shù)組的形式,用到了不同的操作符
但表達(dá)的含義相同:下標(biāo)為i、j的元素
在內(nèi)存中,數(shù)據(jù)的存儲(chǔ)是連續(xù)的
創(chuàng)建一個(gè)二維數(shù)組,可以看到兩行的數(shù)據(jù)是連續(xù)存放在數(shù)組里面的
int arr4[2][2]={{1,2},{3,4}};
既然是連續(xù)的,我們就可以用指針++的形式來(lái)訪問(wèn)二維數(shù)組里面的所有元素
*(arr+i)指向第i行元素
*(arr+i)+j指向第i行下標(biāo)為j的元素的地址
*(*(arr+i)+j)再次解引用,得到j(luò)元素
數(shù)組名的本質(zhì)是地址,是該數(shù)組首元素的地址
二維數(shù)組的首元素是第一行,數(shù)組名arr就是第一行的地址
我們可以把二維數(shù)組的每一行理解為獨(dú)立的一個(gè)一維數(shù)組
這時(shí)候,二維數(shù)組的形式和上述代碼中int* arr[]數(shù)組的形式就相同了
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 2,3,4,5,6 };
int arr3[] = { 3,4,5,6,7 };
//arr1 arr2 arr3是二維數(shù)組里面的每一行
int* arr[] = {arr1, arr2, arr3};
//arr等價(jià)于一個(gè)二維數(shù)組,但有不同
int* arr[]和二維數(shù)組的不同
int*arr數(shù)組里的元素arr1,arr2,arr3的地址是連續(xù)存放的
這里設(shè)計(jì)到一個(gè)新概念:數(shù)組指針
將在下一節(jié)講解!
但是它們對(duì)應(yīng)的各自的數(shù)組內(nèi)數(shù)據(jù)并不連續(xù)
如:arr1和arr2這兩個(gè)數(shù)組各自元素的地址并不連續(xù)
示例3:存放二級(jí)指針的數(shù)組
既然一級(jí)指針可以放進(jìn)數(shù)組里,二級(jí)指針也是指針,同樣也能塞進(jìn)數(shù)組里
下面這串代碼里面的arr2就是一個(gè)存放二級(jí)指針的數(shù)組
int main()
{
int a = 10;
int* p = &a;
int** pp = &p;
int** arr2[4] = {pp};
return 0;
}
你學(xué)會(huì)了嗎?下次給大家分享數(shù)組指針哦!
審核編輯:湯梓紅
-
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70551 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
25939
原文標(biāo)題:【C語(yǔ)言】指針進(jìn)階第二站:指針數(shù)組!
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論