本文目錄一覽:
- 1、C語言函數傳遞二維數組
- 2、如何在C語言的程序中將動態分配的二維數組當做一個參數傳入某個函數?
- 3、C語言問題:動態分配二維數組導入函數問題
- 4、c語言中怎麼用二維數組作為函數參數
- 5、c語言函數怎麼傳入一個二維數組
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語言的程序中將動態分配的二維數組當做一個參數傳入某個函數?
我不明白,如果兩個維度都不是事先確定,你上面要怎麼定義?
arr[][4];
好吧,如果你說的那個可行
那就傳那兩個維度進去。
前面arr[i][j]
那麼就void func(int i,int j,int num)
我不敢保證在func裏面使用到arr[][]的時候貌似能直接使用arr[i][j],我記得這樣用會出錯。
所以你要運算那個地址。
你想要的比如是5行4列的 arr[5][4]
你要第第二行第二個數
那麼就要*(arr+(2-1)*4+2),這樣來得到數字
如果你事先就知道這個維度的話,
直接設定個全局變量
然後連數組都不用傳進去就可以直接運算的。
數組是記錄地址的,會直接修改在原來的地方
C語言問題:動態分配二維數組導入函數問題
假設定義一個整型二維數組(M*N):int (*p)[N] = new int[M][N];
作為函數形參的形式為:TYPENAME func(int p[][N], int size)//size = M
在函數定義中就像使用二維數組一樣使用p。
c語言中怎麼用二維數組作為函數參數
二維數組作為函數參數,實參可以直接使用二維數組名,在被調用函數中對形參數組定義可以指定所有維數的大小,也可以省略第一維的大小說明,如:
它們是合法且等價,也可以使用如下形式:
但不能省略第二維的大小,如下面的定義是不合法的,編譯時會出錯:
因為從實參傳遞來的是數組的起始地址,如果在形參中不說明列數,編譯器將無法定位元素的的位置。
c語言函數怎麼傳入一個二維數組
這樣傳:
函數聲明:Func(變量類型 *[二維數組的列長] arry);
char arry[][4] ;
Func(arry);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/227228.html