本文目錄一覽:
C語言 二維數組傳遞參數
二維數組傳遞給函數的時候,有兩種方式,一種是a[][6],一種是(*a)[6],這裡的6是不能省略的,不然編譯器不知道如何通過加多少來偏移這個指向數組的指針。
C語言問題,請問二維數組的函數參數是怎麼傳遞的?
數組為參數時會退化為一個二級指針傳遞,如圖,可以將函數頭部寫成
void shuchu(int **array_num);
在函數中調用時,直接傳遞數組名就可以了,數組名可以視為數組的「頭指針」,可以用這個指針進行一系列的相關操作,如圖,可以按如下方式調用
shuchu(a);
另外,一個建議:不要在傳參時忽略數組的長度,最好顯式的以參數的形式傳遞給函數
或者,在數組中做標誌,在函數中使用時可以根據標誌自行分出維度
滿意請採納,不滿意請追問
C語言中如何將二維數組作為函數的參數傳遞?
函數原型 type fun (type (name*)[size])\x0d\x0a \x0d\x0atype是你要定義的類型,fun是函數名,name是在函數中二維數組的名字,\x0d\x0asize是二維數組第2維的長度。\x0d\x0a這樣調用這個函數只需要把二維數組函數名傳遞就可以了。
C語言函數傳遞二維數組
C語言如果給函數傳遞二維數組作為參數
先看一個傳遞二維數組的例子:
編譯:
程序看著沒有任何問題,但是編譯器通不過,報錯在處理二維數組參數a的時候,類型不兼容。
C語言裡面對二維數組的存儲是按照一維數組來處理的,二維數組按照行展開的方式按順序存儲,例如在上面的例子中:
二維數組a的定義:
它等同於一維數值的定義:
因為他們的空間存儲分配一樣的。
所以在利用二維數組作為參數傳遞時,必須指定二維數組的列數,否則函數無法勾畫出二維數組的組織形式。只有有了列長度,通過下標a[i][j]時才能得到正確的下標地址,即:
我們改一下上面的額foo函數定義:
編譯運行:
這下就正常了。
參數如上所列。
我們看到,函數的參數聲明改成了:
這個聲明的含義是:
不過此時還是需要指定二維數組的列長度,不然函數內部還是無法使用二維下標去訪問數組:
編譯:
原因同前面方法1一致,如果要訪問二維數組,必須指定列的長度,否則無法計算出該元素的地址,a[i][j]=a [ (i-1)*COLNUM + j ],如果沒有COLNUM,那麼這個地址無法計算出來。從形參的聲明來說,a就是一個指針,指向一維數組的指針,而不是一個二維數組。
這裡要注意的是指針的指針,和二維數組的差異;二維數組的地址是連續的,所有成員按順序排序;而指針的指針只要求指針地址連續,而不要求指針的指針地址連續。
然後作為實參傳遞時,也不能直接使用a傳遞,因為類型不匹配,必須定義新的變數p,然後把a的值賦給p,再傳遞給foo函數。
c語言中怎麼用二維數組作為函數參數
C語言中
指針做函數參數傳遞二維數組有兩種基本方法:1、傳遞「數組指針」pre
t=”code”
l=”cpp”#include
stdio.h
void
output(
int
(*pa)[3],
int
n
)//這個函數只能輸出n行3列的二維數組
{
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、傳遞「指針數組」
先將二維數組的行指針存儲到一個指針數組中,再將指針數組傳遞到子函數中去。pre
t=”code”
l=”cpp”#include
stdio.h
void
output(
int
*pa[],
int
row,int
col
)
//這個函數更通用,但調用前,要做好準備工作。
{
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);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239560.html