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

時間 2021-11-04 23:16:38

1樓:鄞臨婁溶溶

在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] = ;

2樓:匿名使用者

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

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

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

3樓:文正

int fun(int **i);

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

c語言中怎麼用二維陣列作為函式引數

4樓:我們最2的人

二維陣列作為函式引數,實參可以直接使用二維陣列名,在被呼叫函式中對形引數組定義可以指定所有維數的大小,也可以省略第一維的大**明,如:

它們是合法且等價,也可以使用如下形式:

但不能省略第二維的大小,如下面的定義是不合法的,編譯時會出錯:

因為從實參傳遞來的是陣列的起始地址,如果在形參中不說明列數,編譯器將無法定位元素的的位置。

5樓:韌勁

可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以指定所有維數的大小,也可以省略第一維的大**明,如:

void func(int array[3][10]);

void func(int array[10]);

二者都是合法而且等價,但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:

void func(int array);

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

void func(int array[3]);實引數組維數可以大於形引數組,例如實引數組定義為:

void func(int array[3][10]);

而形引數組定義為:

int array[5][10];

這時形引數組只取實引數組的一部分,其餘部分不起作用。

對於陣列 int p[m][n];

如果要取p[i][j]的值(i>=0 && i

p + i*n + j;

void func(int array[3][10]);

void func(int array[10]);

變為:void func(int **array, int m, int n);

在轉變後的函式中,array[i][j]這樣的式子是不對的(不信,大家可以試一下),因為編譯器不能正確的為它定址,所以我們需要模仿編譯器的行為把array[i][j]這樣的式子手工轉變為:

*((int*)array + n*i + j);

在呼叫這樣的函式的時候,需要注意一下,如下面的例子:

int a[3][3] =

, ,};func(a, 3, 3);

根據不同編譯器不同的設定,可能出現warning 或者error,可以進行強制轉換如下呼叫:

func((int**)a, 3, 3);

其實多維陣列和二維陣列原理是一樣的,大家可以自己擴充的多維陣列,這裡不再贅述。寫到這裡,我先向看了這篇文章後悔的人道歉,浪費你的時間了。下面是一 個完整的例子程式,這個例子程式的主要功能是求一個圖中某個頂點到其他頂點的最短路經,圖是以鄰接矩陣的形式存放的(也就是一個二維陣列),其實這個函式 也是挺有用的,但是我們這篇文章的重點在於將二維陣列作為函式的引數傳遞。

6樓:匿名使用者

很簡單的,陣列作為函式引數傳遞的時候只要是陣列名就可以了,因為陣列名本身就是陣列的首地址 .給個程式看看

#include

#define n 3

int array[n][n];

void main()

//呼叫矩陣轉置函式

convert(array);

printf("\n");

for(i=0;i

void convert(int array[3]) }

7樓:混世達人

建議這樣的專業語言問題,去qq群的c語言群去諮詢,那裡面有很多的高手。

8樓:匿名使用者

直接就寫陣列的名稱就可以了,比如你定義的陣列是a[4][3],在實參中填a就可以,在型參中定義一個二維陣列或一個指標變數就可以讓二維陣列的值在函式中使用了!

9樓:匿名使用者

可以用指標的形式表示,或者用二維陣列顯示錶示

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

10樓:匿名使用者

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

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

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

c語言中 指標做函式引數傳遞二維陣列

11樓:匿名使用者

#include

void fun(int (*p1)[3],int (*p2)[3]);

int main()

int p1[3][3]=,,} ;

int p2[3][3] = ;

int i = 0, j = 0;

fun(p1,p2);

for(i = 0;i < 3;i++){for(j = 0;j < 3;j++){printf("%d ",*(*(p2+i)+j));

printf("\n");

return 0;

void fun(int (*p1)[3],int (*p2)[3])

int i = 0,j = 0;

for(i = 0;i < 3;i++){for(j = 0;j < 3;j++){*(p2[j]+i) = *(p1[i]+j);

12樓:匿名使用者

c語言中 指標做函式引數傳遞二維陣列有兩種基本方法:

1、傳遞“陣列指標”

#include

void output( int (*pa)[3], int n )//這個函式只能輸出n行3列的二維陣列

{int i,j;

for( i=0;i

2、傳遞“指標陣列”  先將二維陣列的行指標儲存到一個指標陣列中,再將指標陣列傳遞到子函式中去。

#include

void output( int *pa, int row,int col ) //這個函式更通用,但呼叫前,要做好準備工作。

{int i,j;

for( i=0;i

13樓:古老的情歌

簡直將二維指標陣列首地址傳出去。

14樓:

//#include "stdafx.h"//vc++6.0加上這一行.

#include "stdio.h"

void myprint(int (*p)[3])}void mytranspose(int (*p)[3],int (*q)[3])

int main(void),,},b[3][3];

printf("before the transpose:\n");

myprint(a);

printf("after the transpose:\n");

mytranspose(a,b);

myprint(b);

return 0;}

15樓:2b丶xiao年輕

二維陣列指標 (*p)[3]

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

焮欣 首先你要理解二維陣列的真正含義,它的第一維就是一組資料的起始位址,第二維就是某組資料中的某個值.其次,你要知道a 4 所表達的意思,是指二維陣列a的每一維都是由4個元素組成的一維陣列.而編譯器可以根據你賦給a的初值個數計算它的第一維長度 元素總個數 4,如果不能整除,則長度加1,此時還應該有幾...

求助 C語言二維陣列指標問題,c語言二維陣列用指標表示的問題

1.對於int p a p型別和a是不同的。p是指向乙個指標 指向int型別的量 的指標,a則是指向乙個一維陣列 含2個int元素 的指標。想要建立相同型別的指標應該用int p 2 才行 3.感覺p跟a就同級吧但型別不同 所以其實int p a 兩側的指標的型別是不相同的,只是a的值賦給p而已 假...

C語言二維陣列程式設計題,C語言二維陣列程式設計題

第一道 include stdio.h define n 4 int main int f1 1,f2 1 for int i 0 i n i int result f1 f2 printf d n result return 0 第二道 include define n 10 int main e...