C語(yǔ)言中
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的安鄉(xiāng)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
指針做函數(shù)參數(shù)傳遞二維數(shù)組有兩種基本方法:1、傳遞“數(shù)組指針”pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
(*pa)[3],
int
n
)//這個(gè)函數(shù)只能輸出n行3列的二維數(shù)組
{
int
i,j;
for(
i=0;in;i++
){
for(
j=0;j3;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
output(a,2);
}2、傳遞“指針數(shù)組”
先將二維數(shù)組的行指針存儲(chǔ)到一個(gè)指針數(shù)組中,再將指針數(shù)組傳遞到子函數(shù)中去。pre
t="code"
l="cpp"#include
stdio.h
void
output(
int
*pa[],
int
row,int
col
)
//這個(gè)函數(shù)更通用,但調(diào)用前,要做好準(zhǔn)備工作。
{
int
i,j;
for(
i=0;irow;i++
){
for(
j=0;jcol;j++
)
printf("%d
",
pa[i][j]
);
printf("\n");
}
}
void
main()
{
int
a[2][3]={
{1,2,3},
{4,5,6}
};
int
i;
int
*pa[2];
for(
i=0;i2;i++
)
pa[i]=a[i];
output(pa,
2,
3);
}
C語(yǔ)言如果給函數(shù)傳遞二維數(shù)組作為參數(shù)
先看一個(gè)傳遞二維數(shù)組的例子:
編譯:
程序看著沒(méi)有任何問(wèn)題,但是編譯器通不過(guò),報(bào)錯(cuò)在處理二維數(shù)組參數(shù)a的時(shí)候,類(lèi)型不兼容。
C語(yǔ)言里面對(duì)二維數(shù)組的存儲(chǔ)是按照一維數(shù)組來(lái)處理的,二維數(shù)組按照行展開(kāi)的方式按順序存儲(chǔ),例如在上面的例子中:
二維數(shù)組a的定義:
它等同于一維數(shù)值的定義:
因?yàn)樗麄兊目臻g存儲(chǔ)分配一樣的。
所以在利用二維數(shù)組作為參數(shù)傳遞時(shí),必須指定二維數(shù)組的列數(shù),否則函數(shù)無(wú)法勾畫(huà)出二維數(shù)組的組織形式。只有有了列長(zhǎng)度,通過(guò)下標(biāo)a[i][j]時(shí)才能得到正確的下標(biāo)地址,即:
我們改一下上面的額foo函數(shù)定義:
編譯運(yùn)行:
這下就正常了。
參數(shù)如上所列。
我們看到,函數(shù)的參數(shù)聲明改成了:
這個(gè)聲明的含義是:
不過(guò)此時(shí)還是需要指定二維數(shù)組的列長(zhǎng)度,不然函數(shù)內(nèi)部還是無(wú)法使用二維下標(biāo)去訪問(wèn)數(shù)組:
編譯:
原因同前面方法1一致,如果要訪問(wèn)二維數(shù)組,必須指定列的長(zhǎng)度,否則無(wú)法計(jì)算出該元素的地址,a[i][j]=a [ (i-1)*COLNUM + j ],如果沒(méi)有COLNUM,那么這個(gè)地址無(wú)法計(jì)算出來(lái)。從形參的聲明來(lái)說(shuō),a就是一個(gè)指針,指向一維數(shù)組的指針,而不是一個(gè)二維數(shù)組。
這里要注意的是指針的指針,和二維數(shù)組的差異;二維數(shù)組的地址是連續(xù)的,所有成員按順序排序;而指針的指針只要求指針地址連續(xù),而不要求指針的指針地址連續(xù)。
然后作為實(shí)參傳遞時(shí),也不能直接使用a傳遞,因?yàn)轭?lèi)型不匹配,必須定義新的變量p,然后把a(bǔ)的值賦給p,再傳遞給foo函數(shù)。
二維數(shù)組無(wú)法作為參數(shù)直接傳遞給函數(shù),但是可以利用二維數(shù)組內(nèi)部數(shù)據(jù)的連續(xù)性,將二維數(shù)組的地址按照一維數(shù)組的方式傳遞給函數(shù),并傳入對(duì)應(yīng)的行列數(shù),從而實(shí)現(xiàn)函數(shù)內(nèi)打印二維數(shù)組的效果。
以整型為例,具體方式如下:
void?print_array(int?*a,?int?m,?int?n)//a為一個(gè)m行,n列的二維數(shù)組的首地址。
{
int?i,?j;
for(i?=?0;?i??m;?i?++)
{
for(j?=?0;?j??n;?j?++)
{
printf("%d,",?a[i*n+j]);//a[i*n+j]也就是原始二維數(shù)組第i行第j列的元素。
}
printf("\n");//每行結(jié)束輸出換行。
}
}
名稱(chēng)欄目:c語(yǔ)言二維數(shù)組用函數(shù) C語(yǔ)言二維數(shù)組函數(shù)
文章分享:http://jinyejixie.com/article10/hpcddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、ChatGPT、做網(wǎng)站、品牌網(wǎng)站建設(shè)、App開(kāi)發(fā)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容