C語言用函數(shù)實現(xiàn)二維數(shù)組 c語言二維數(shù)組函數(shù)的使用方法

C語言函數(shù)傳遞二維數(shù)組

C語言如果給函數(shù)傳遞二維數(shù)組作為參數(shù)

創(chuàng)新互聯(lián)建站長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為茫崖企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站制作茫崖網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

先看一個傳遞二維數(shù)組的例子:

編譯:

程序看著沒有任何問題,但是編譯器通不過,報錯在處理二維數(shù)組參數(shù)a的時候,類型不兼容。

C語言里面對二維數(shù)組的存儲是按照一維數(shù)組來處理的,二維數(shù)組按照行展開的方式按順序存儲,例如在上面的例子中:

二維數(shù)組a的定義:

它等同于一維數(shù)值的定義:

因為他們的空間存儲分配一樣的。

所以在利用二維數(shù)組作為參數(shù)傳遞時,必須指定二維數(shù)組的列數(shù),否則函數(shù)無法勾畫出二維數(shù)組的組織形式。只有有了列長度,通過下標a[i][j]時才能得到正確的下標地址,即:

我們改一下上面的額foo函數(shù)定義:

編譯運行:

這下就正常了。

參數(shù)如上所列。

我們看到,函數(shù)的參數(shù)聲明改成了:

這個聲明的含義是:

不過此時還是需要指定二維數(shù)組的列長度,不然函數(shù)內(nèi)部還是無法使用二維下標去訪問數(shù)組:

編譯:

原因同前面方法1一致,如果要訪問二維數(shù)組,必須指定列的長度,否則無法計算出該元素的地址,a[i][j]=a [ (i-1)*COLNUM + j ],如果沒有COLNUM,那么這個地址無法計算出來。從形參的聲明來說,a就是一個指針,指向一維數(shù)組的指針,而不是一個二維數(shù)組。

這里要注意的是指針的指針,和二維數(shù)組的差異;二維數(shù)組的地址是連續(xù)的,所有成員按順序排序;而指針的指針只要求指針地址連續(xù),而不要求指針的指針地址連續(xù)。

然后作為實參傳遞時,也不能直接使用a傳遞,因為類型不匹配,必須定義新的變量p,然后把a的值賦給p,再傳遞給foo函數(shù)。

C語言,如何在子函數(shù)中寫一個3*3二維數(shù)組,給主函數(shù)調(diào)用?。?/h2>

在子函數(shù)申請二維數(shù)組,主函數(shù)使用,可以用動態(tài)申請。

方法不止一種,我這里用指針的指針實現(xiàn)二維數(shù)組。

二維數(shù)組除了行列,本身地址也是連續(xù)的,從第一行第一列的元素地址++,可以取出所有元素。所以我這里先申請了完整的連續(xù)地址。

#includestdio.h

#includemalloc.h

int?**?sr(void)

{

int?i,j;

int?*memory=(int?*)malloc(sizeof(int)*9);//申請完整的連續(xù)內(nèi)存地址3*3

int?**arr=(int?**)malloc(sizeof(int*)*3);//申請二維數(shù)組行指針數(shù)組(也就是二維數(shù)組)

if(!memory?||?!arr){

printf("內(nèi)存申請錯誤!\n");return?NULL;}

for(i=0,j=0;i9;i+=3)//將連續(xù)地址按列數(shù),取出每行首地址,賦值給二維數(shù)組元素

arr[j++]=memory[i];

for(i=0;i3;i++)

for(j=0;j3;j++)

scanf("%d",arr[i][j]);

return?arr;

}

int?main(void)

{

int?i,j,**arr=sr();

if(!arr)

return?1;

printf("---主函數(shù)調(diào)用子函數(shù)定義的二維數(shù)組---\n");

for(i=0;i3;i++,printf("\n"))

for(j=0;j3;j++)

printf("%d?",arr[i][j]);

printf("\n---實現(xiàn)二維數(shù)組地址連續(xù)性---\n");

int?*p=arr[0][0];

while(p=arr[2][2])

printf("%d?",*p++);

return?0;

}

急急?。。∪绾斡胏語言輸入和輸出一個二維數(shù)組??

#include stdio.h

#include stdlib.h

int main()

{

int a[2][2];

int i,j;

for (i=0;i2;i++)

{

for (j=0;j2;j++)

{

scanf("%d ",a[i][j]);

}

}

for(i=0;i2;i++)

for(j=0;j2;j++)

printf("%d",a[i][j]);

return 0;

}

運行成功

C語言如何用一個自定義函數(shù)打印一個二維數(shù)組

二維數(shù)組無法作為參數(shù)直接傳遞給函數(shù),但是可以利用二維數(shù)組內(nèi)部數(shù)據(jù)的連續(xù)性,將二維數(shù)組的地址按照一維數(shù)組的方式傳遞給函數(shù),并傳入對應(yīng)的行列數(shù),從而實現(xiàn)函數(shù)內(nèi)打印二維數(shù)組的效果。

以整型為例,具體方式如下:

void?print_array(int?*a,?int?m,?int?n)//a為一個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é)束輸出換行。

}

}

文章名稱:C語言用函數(shù)實現(xiàn)二維數(shù)組 c語言二維數(shù)組函數(shù)的使用方法
文章起源:http://muchs.cn/article28/hjsicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、自適應(yīng)網(wǎng)站、網(wǎng)頁設(shè)計公司、網(wǎng)站營銷、定制開發(fā)云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營