c中,怎麼把陣列變成自定義函式的形參?還有,給陣列做實參的例子吧。最後,看下我這個,,顯示

2021-04-18 23:09:07 字數 4395 閱讀 2445

1樓:匿名使用者

你是問如bai何將陣列傳du

遞給函式吧!zhi

除了引用,變數傳遞都涉dao及到資料複製專,也就是在函屬數內要接受實參時,需要一個容器儲存傳入的值,也就是形參的作用,進入函式後為形參在棧上分配記憶體空間,然後將外部變數的值儲存到該空間,便於函式內處理,當函式退出時,釋放該形參(變數)。

而傳遞陣列時,為了防止複製大量的資料所造成的系統資源浪費(cpu時間和記憶體),c或c++採用指標傳遞,也即傳遞陣列的地址。

由於地址對於某一個系統都是固定長度的,為了讓函式知道陣列中每個元素的資料長度,便於正確訪問不同型別的陣列,因此傳入的地址必須具有型別。

針對你的題目中的問題,顯然main中的陣列a是個float型別一維陣列,因此其地址型別為 float*。為了要正確實現傳遞,sum的形參應該定義同樣型別的指標變數,所以sum應該如下定義:

float sum(int *p)

main中傳遞陣列方法: x=sum(a);

sum函式中訪問陣列可以用指標也可以用陣列形式,

比如for (i=0;i<10;i++)

也可以採用指標形式:

for (i=0;i<10;i++)

c語言中陣列名作為實參傳給被呼叫的函式時,形參獲得的是什麼

2樓:dinah穎

在函式中,之所以陣列的值能夠被修改,就是因為形參得到的是陣列的地址,而不是資料,所以,行參獲得的應該是陣列的地址

3樓:匿名使用者

把陣列作為引數傳遞給函式的時候,並非把整個陣列的內容傳遞進去,此時陣列退化為一個同型別的指標,這個指標的值就是陣列首元素的地址值。

4樓:匿名使用者

c語言中陣列來名作為實參傳給自

被呼叫的函bai數時,形參獲du

得的是陣列的起始地zhi

址。還是用例dao子說話吧。

#include

int *arry(int *a)

return b;

}int main()

;int *c;

int i;

c = arry(a);

for(i=0;i<5;i++) }

主要是通過指標把陣列,例如main裡面的a的地址傳入arry函式,然後在arry函式中用一個相容型別的指標接收地址,然後就可以再這個指標下的地址操作地址上面的資料了。

arry返回的時候也是返回一個指標(地址)。

5樓:匿名使用者

首地址。以陣列名作為函式實參。通過指標可以獲得陣列的元素地址。

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

6樓:我們最2的人

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

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

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

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

7樓:韌勁

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

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);

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

8樓:匿名使用者

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

#include

#define n 3

int array[n][n];

void main()

//呼叫矩陣轉置函式

convert(array);

printf("\n");

for(i=0;i

void convert(int array[3]) }

9樓:混世達人

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

10樓:匿名使用者

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

11樓:匿名使用者

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

在c語言中,用陣列名作為函式呼叫時的實參,實際上傳遞給形參的是____________。

12樓:足壇風行者

首地址。

因為陣列名傳遞的是陣列的地址也就是第一個元素的地址。例如:

a[3]這個陣列,3指個數,a[0]指第一個元素,全部元素指a[0]~a[2];那陣列名a規定的就是首地址。

擴充套件資料

c語言中函式引數傳遞的三種方式:

1、傳值,就是把你的變數的值傳遞給函式的形式引數,實際就是用變數的值來新生成一個形式引數,因而在函式裡對形參的改變不會影響到函式外的變數的值。

2、傳地址,就是傳變數的地址賦給函式裡形式引數的指標,使指標指向真實的變數的地址,因為對指標所指地址的內容的改變能反映到函式外,也就是能改變函式外的變數的值。

3、傳引用,實際是通過指標來實現的,能達到使用的效果如傳址,可是使用方式如傳值。說幾點建議:如果傳值的話,會生成新的物件,花費時間和空間,而在退出函式的時候,又會銷燬該物件,花費時間和空間。

13樓:匿名使用者

實引數組的首地復址。

在用數制組名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體,陣列名就是陣列的首地址,函式得到一個函式值,即為該字元陣列的首地址。

因此在陣列名作函式引數時所進行的傳送只是地址的傳送,也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。

14樓:匿名使用者

陣列名傳遞的是陣列的地址也就是第一個元素的地址 所以選 d

15樓:天雨下凡

選擇d.實引數組的首地址

16樓:匿名使用者

d首地址

~~~~~~~~

17樓:yeara洛

d.實引數組的首地址

c 中呼叫自定義函式的問題

被調函式,是有返回值 的,如果需要用到返回值,比如輸出 int fun std cout fun 如果你只是想輸專出那句話,那麼呼叫屬時直接fun 還有,你說的這個print 函式名,這個不然是偽 不然這個也是個函式名,表示輸出的意思 不是固定的,只是讓人容易辨識 c語言的話 如果函式名後面加了 就...

python中怎麼呼叫自定義函式

網上的很多資料都是說 如果把my abs 的函式定義儲存為abstest.py檔案了,那麼,可以在該檔案的當前目錄下啟動python直譯器,用from abstest import my abs來匯入my abs 函式,注意abstest是檔名 不含.py副檔名 但是在嘗試這種方法後,發現仍然還是無...

vba如何將陣列帶入自定義的函式

窗體放一個label和一個command,如下 private sub command1 click dim i,a 19 max,min,sum,a1,a2,a3,a4,a5 as integer label1.caption randomize label1.caption 20名學生成績 vb...