數(shù)組指針,其本質(zhì)是指針,是指向一整個(gè)數(shù)組的指針
一,這里,要說明指向數(shù)組的指針和指向一整個(gè)數(shù)組的指針即數(shù)組指針的區(qū)別
我們知道,數(shù)組是一塊連續(xù)的內(nèi)存,而數(shù)組名是該數(shù)組的地址,該地址同時(shí)也是數(shù)組首元素的地址
例如
int arr[3]={1,2,3};
printf("%p",arr);//此處打印的就是arr的地址
數(shù)組名是數(shù)組首元素的地址,其作用范圍為該數(shù)據(jù)類型的范圍,指向數(shù)組的第一個(gè)元素,并且+1操作跳過幾個(gè)字節(jié)取決于其數(shù)據(jù)類型,int 則跳過個(gè)4個(gè)字節(jié),char 則跳過一個(gè)字節(jié)
但是有兩種情況,數(shù)組名可以指向整個(gè)數(shù)組
一,sizeof(arr);此處的arr代表是整個(gè)數(shù)組,所以sizeof()才可以統(tǒng)計(jì)出整個(gè)數(shù)組的大小
二,&arr,取arr的地址,即使該地址指向整個(gè)數(shù)組,+1操作可跳過整個(gè)數(shù)組
由此就可以給出普通指向數(shù)組的指針和數(shù)組指針的區(qū)別
普通指向數(shù)組的指針
int arr[3]={1,2,3};
int *p=arr;//此處p就是int類型的指針,存儲(chǔ)arr數(shù)組的首地址
//p是指向數(shù)組的指針,為普通指針
printf("%d",*p);//打印出來就是arr的首元素--1
printf("%d",*(p+1);//此處打印的是arr的第二個(gè)元素--2
//因?yàn)閜為整型指針,+1操作跳過的是一個(gè)整型,即跳過1
數(shù)組指針
int arr[10] = {1,2,3,4,5,6,7,8,9,10 };
*parr代表他是個(gè)指針 int [10]代表指針類型是一個(gè)10個(gè)數(shù)的數(shù)組,指向一個(gè)10個(gè)元素的數(shù)組
//其中存放的是數(shù)組的地址
int(*parr)[10] = &arr;
//遍歷數(shù)組中的元素
for (int i = 0; i< 10; i++)
{*parr解引用出來是arr數(shù)組的首地址,沒有指向整個(gè)數(shù)組,parr指向整個(gè)數(shù)組
printf("%d ", *((*parr) + i)); //基本沒有這樣寫的,只是一個(gè)例子
}
了解了數(shù)組指針的定義后,我們應(yīng)該思考,數(shù)組指針如何使用
數(shù)組指針和二維數(shù)組//普通打印二維數(shù)組
//r代表行,c代表列
void print1(int arr[3][5], int r, int c)
{for (int i = 0; i< r; i++)
{for (int j = 0; j< c; j++)
{ printf("%d ", arr[i][j]);
}
printf("\n");
}
}
//利用數(shù)組指針打印二維數(shù)組
//p為數(shù)組指針,指向一個(gè)擁有5個(gè)int類型元素的數(shù)組,即二維數(shù)組第一行元素
void print2(int(*p)[5], int r, int c)
{for (int i = 0; i< r; i++)
{for (int j = 0; j< c; j++)
{ //(p+i)一行一行跳 解引用再+j一個(gè)一個(gè)訪問
printf("%d ", *(*(p+i) + j));
}
printf("\n");
}
}
int main()
{//打印二維數(shù)組
int arr[3][5] = {{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
//經(jīng)典打印方式
//print1(arr, 3, 5);
//數(shù)組指針打印
print2(arr, 3, 5);//二維數(shù)組傳參是把第一行的地址當(dāng)成首地址
return 0;
}
數(shù)組指針和指針數(shù)組int main()
{//整型數(shù)組
int parr[10];
//指針數(shù)組
int *parr1[10];
//數(shù)組指針
int(*parr2)[10];
//去掉數(shù)組名就是存放的元素類型 int (*) [5]
//存放數(shù)組指針的數(shù)組 該數(shù)組有10個(gè)元素 每個(gè)元素都可以指向一個(gè)含5個(gè)元素的數(shù)組
int(*parr3[10])[5];
return 0;
}
總結(jié)數(shù)組指針本質(zhì)就是指針,具體指針的基本特征和使用,一般應(yīng)用于二維數(shù)組即以上,
與指針數(shù)組的結(jié)合,可以應(yīng)用再更復(fù)雜的結(jié)構(gòu)
本次復(fù)習(xí)暫時(shí)到此,歡迎大佬們補(bǔ)充和糾正
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧