c二維陣列傳遞問題,C語言怎麼以二維陣列作為引數傳遞的問題

2022-10-08 06:36:44 字數 3853 閱讀 2831

1樓:龔煒林

你這裡nn裡面確實是二維陣列,char al[10]是說al是一個一維維度為10的二維陣列指標變數。因此和你的ne陣列是對應的,傳參是沒問題的。

錯誤在於

1.你的函式呼叫有問題:nn(ne);

2.你給陣列賦值,al[0]="asd";

這種使用,是僅在陣列初始化的時候被允許的。

如果要實現這個字串放到陣列,可以使用

memset(al[0], 0, sizeof(al[0]));//全部為0

strcpy(al[0], "asd");//複製字串另外:al[0]是一個一維陣列的首地址,因此你把它當一維陣列使用時正確的。

2樓:匿名使用者

int nn(char *)

main() {

char ne[10][10];

......

nn(ne[i]); // 這裡的ne[i]是char 指標ne[10] = "asd"; // 這是錯誤的,應該使用串複製函式,即strcpy(ne[10],"asd");

3樓:匿名使用者

應該是*ai[0]="asd"

對於ai[0][10]而言,ai[0]是指向「ai[0][10]「這個一維陣列的指標

就相當於int *p,它指向一個一維陣列int a[10]=, p=a;

雖然原理上是這麼說

但是這個*ai[0]="asd"根本就是錯誤的,語言不允許這做

4樓:匿名使用者

不清楚你的nn函式做了什麼,另外字串陣列的話必須在定義的時候賦值,而不能在其他地方賦值

一個關於c語言程式二維陣列傳參的問題 10

5樓:匿名使用者

#include

#define n 100 //n應足夠大int max(int a,int n)

}return k;

}int main()

}for(i = 0;i < n;i++)if(x == y)

}if(flag == 0) printf("沒有找到鞍點。\n");

return 0;}

c語言怎麼以二維陣列作為引數傳遞的問題

6樓:crazy_小豬

考慮要把a作為引數傳入到print中,那麼print函式就要定義一個接收二維陣列的引數,那麼什麼引數能接收二維陣列呢。

就是print(int (*newbuf)[3])然後newbuf的地址就是a的地址,然後newbuf[i][j]來訪問每一個元素了

有問題繼續問哈,寫的可能不太明白

7樓:路人之三

#include

#include

#include

void fun(int x[3])

printf("\n");}}

int main()

;fun(a);

return 0;

}定義形參的時候定義列的數目即可,其實就算你隨便定義行和列的大小也可以執行,只要將陣列地址傳進去即可

c語言問題,請問二維陣列的函式引數是怎麼傳遞的?

8樓:折心灬小軒

陣列為引數時會退化為一個二級指標傳遞,如圖,可以將函式頭部寫成void shuchu(int **array_num);

在函式中呼叫時,直接傳遞陣列名就可以了,陣列名可以視為陣列的「頭指標」,可以用這個指標進行一系列的相關操作,如圖,可以按如下方式呼叫

shuchu(a);

另外,一個建議:不要在傳參時忽略陣列的長度,最好顯式的以引數的形式傳遞給函式

或者,在陣列中做標誌,在函式中使用時可以根據標誌自行分出維度滿意請採納,不滿意請追問

9樓:深海_藍魚

你好!關於二維陣列傳參問題,

在呼叫的時候直接傳陣列指標即可,

即:void main()

函式形參有兩種寫法,可以寫成

void shuru(int (*array_num)[2]){}//或者

void shuru(int array_num[2]){}函式shuchu() 也是一樣,

望採納,如有不明白請追問謝謝!

10樓:風若遠去何人留

在形參是陣列的情況下,只要是陣列,無論維數,實際上在呼叫函式時,傳給函式的將是一個陣列的首地址,以及維數等相關資訊

也就是說,在函式執行過程中,並不會新開闢記憶體空間,而是形參實參共用同一段記憶體空間

所以,在這種情況下,函式內部對陣列進行修改,其值會返回給實參你的例子中呼叫部分有問題,不能這樣

shuru(a[10][2])

而是shuru(a)

因為a[10][2]代表陣列a中的一個元素,而且是越界的而a才是陣列名

11樓:手機使用者

"陣列為引數時會退化為一個二級指標傳遞"這個理解是不對的 二維陣列的形參宣告應該是 int(*array_num)[2]

12樓:匿名使用者

main裡面傳的實參應該是地址不是一個值,而您傳的是值且還是越界了,改成shuru(a)。呼叫函式接受的也應該是一個地址,二維陣列地址做形參寫成array_num[2]

13樓:匿名使用者

實參是二維陣列名,形參是行指標,只不過形參允許寫成二維陣列形式罷了

大家看一下這個c語言有關二維陣列傳遞的問題

14樓:

1 實引數組a與形引數組b佔用同一片儲存單元。

2 程式的功能是輸入4*4共十六個數,求16個數的最大值。

3 程式邏輯存在問題,將

int i,j,m=0;

//改為:

int i,j,m=b[0][0];

//才對。

c語言中如何將二維陣列作為函式的引數傳遞

15樓:鄞臨婁溶溶

在c語言中可以用二維陣列作為實參或者形參。

1、函式中用二維陣列作為形參,函式宣告中可以指定所有維數的大小,也可以省略第1維的維數如:

void f(int array[3][10]); //正確

void f(int array[10]); //正確上面的兩種二維陣列形參表示都是正確的。

2、函式中用二維陣列作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:

void f(int array); //錯誤

因為從實參傳遞來的是陣列的起始地址,在記憶體中按陣列排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

void f(int array[3]); //錯誤 3、二維陣列作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的資料型別一致。比如定義如下函式:

void f(int array[10]);可以將如下陣列傳遞給函式f。

int a[2][10] = ;

int b[4][10] = ;

16樓:匿名使用者

函式原型 type fun (type (name*)[size])type是你要定義的型別,fun是函式名,name是在函式中二維陣列的名字,

size是二維陣列第2維的長度。

這樣呼叫這個函式只需要把二維陣列函式名傳遞就可以了。

17樓:文正

int fun(int **i);

fun是函式名,i就是二維資料名.

關於c語言二維陣列輸出問題,C語言程式設計二維陣列輸出一個23的矩陣

二維bai陣列是由一維陣列構成的,迴圈第du一維輸出zhi就可以了 include stdio.h int main int argc,char argv int i for i 0 i 7 puts s i return 0 執行結果 版空的那一行就是那個權空字串的輸出結果。c語言程式設計 二維陣...

c 二維陣列排序問題,C 二維陣列排序問題

要做到p排好序的同時c同時排好序,c的對應的元素關鍵字大小應和p正相關,否則必須分別排序。同時要排序後知道之前的位置,可以考慮用間接定址 需要一個等大小的指標陣列 而且,這樣做的話,並真正在地對陣列排序,而是對指標排序,通過排好序的指標懂得陣列的的大小順序,當然,排序前的位置也是知道的。includ...

C語言中關於二維陣列的問題,c語言關於定義二維陣列的問題

float a 5 是定義了一個指向陣列的指標,如果要把它當成二維陣列的話,相當於列數為5,行數可以動態分配。如 float a 5 int n 2 定義行數為2 a new float n 5 int sum 0 for int i 0 i 對於你定義的這個陣列,它表示有5個float 型別的指標...