c語言一個將陣列傳遞給函式的程式不懂?求解!

2023-03-26 11:55:04 字數 3435 閱讀 4085

1樓:網友

int largest()裡面兩個引數有什麼用?

一個是陣列,一個是陣列長度。

為什麼if 語句中num_array[count]要大於biggest;

函式本身是為了找到陣列中最大的數,迴圈查詢,如果找到比當前最大的數biggest更大的數,則更新biggest,也就是下一句:biggest=num_array[count];

而且並沒有陣列是array為什麼會有num_array.

num_array只是個函式引數名稱,並不重要,你也可以寫arr,a,都可以。

重要的是int num_array 中的int和,表明這是個整數陣列。

還有就是陣列為什麼要傳遞給函式,有什麼用?

陣列被傳遞給函式,當然是為了用陣列,具體而言,是為了呼叫陣列中某些或全部的元素的值。

當一個陣列被傳遞到一個函式,這個陣列的內容(元素的值)就可以被修改。因為陣列的傳遞實際上是把它的首地址傳遞進函式。

2樓:匿名使用者

傳陣列給函式都是傳的這個陣列的指標。

因為函式體裡無法知道這個陣列的大小,所以第2個引數是傳遞陣列的大小的。

這個函式是尋找這個陣列的最大的元素,所以在if裡面判斷,然後根據判斷賦值。

誰能解釋一下陣列在函式中該怎麼傳遞(c++中)

3樓:匿名使用者

1、陣列在函式中的傳遞是以指標方式進行的,作為實參,被調函式僅接收陣列的首址,至於陣列的長度往往需要另外一個實參提供(字元陣列除外),2、欲將在被調函式中定義的陣列傳遞(返回)給呼叫函式,需要動態申請(new)記憶體,並仍以指標方式回傳,長度不需要回傳,但要記住在程式結束前要釋放(delete)已申請的動態空間。

4樓:匿名使用者

陣列名+陣列大小。只能這樣子。

int a[10];

getarray( int b, int length);

2.在子函式里 new 一個或者 malloc一個新陣列,但不支援這樣做,會有風險。

getarray( int* b, int length);

4.陣列可以引用,但是其結果,得到的只是一個陣列頭個元素的地址。

5樓:網友

1.直接傳陣列首地址,即陣列的變數名;

2.最好使用new/allocate,在主函式中delete/free;

3.陣列首地址就是指標,當然如有必要,把長度也傳遞;

4.即有指標又有引用看上就亂了,但應該可以用指標的引用。

6樓:匿名使用者

陣列在c++中是以指標的形式進行傳遞的。

我們可以把形參寫成指標形式,也可以寫成陣列形式,但本質上傳遞的都是指標。引用《c++ primer》上的一個例子:

//儘管形式不同,但這三個print函式是等價的。

//每個函式都有一個const int*型別的形參。

void print(const int*);

void print(const int); 可以看出來,函式的意圖是作用於一個陣列。

void print(const int[10]);這裡的維度表示我們期望陣列含有多少元素,實際不一定。

以上三種形式的宣告是等價的,當呼叫print函式時,編譯器只檢查傳入的引數是否是(或能轉換成)const int*:

int i = 0, j[2] =

print(&i); 正確:&i的型別是int*

print(j); 正確:j轉換成int*並指向j[0]

7樓:

函式中陣列的傳遞,實際上傳遞的是陣列的首地址,理解了這一點就行了。

指標是地址,引用也是地址。。。

用c語言寫了一個輸入一個一維陣列的函式,如何在後來寫的函式中呼叫該陣列?

8樓:欽獨特

同樣的**為什麼我輸出的時候最後一個數字是亂碼呢。

c語言中,陣列名作為函式引數,屬於什麼傳遞,為什麼?

9樓:行了我

c語言中,陣列名作為函式引數,屬於陣列引數傳遞。在中,允許使用陣列作為實參傳遞到子過程的形參中,陣列傳遞必須採用地址傳遞的方式來傳遞引數。

陣列型變數名本身只是該陣列所佔儲存空間的首地址,函式呼叫時,系統不會為形參分配陣列儲存空間,而是僅僅分配一個存放陣列地址(第一個元素地址)的儲存空間,此後,將實引數組的首地址傳遞給形參變數。

10樓:膽市倨

屬於地址傳遞,在函式里修改的話,將直接影響呼叫方的數值。這是因為陣列名代表這個陣列的首地址,不過是靜態不可更改的而已。在函式里用引用[i]下標時,就是找到這個陣列第i號元素的地址進行修改的。

所以是第於是地址傳遞。

11樓:匿名使用者

你要記住,所有傳遞給函式的引數都是通過值傳遞方式進行的。陣列名作為函式引數也不例外。

c語言 陣列 程式求解,請把過程說的詳細一點,謝謝

12樓:風若遠去何人留

關鍵語句為 a[i]=*p++;

這句執行的效果為。

a[i] =p;

p++;即先賦值 再移動指標。

而p初始值為a 即最初 *p為a[0]

可以看到隨著迴圈,a[i]和p是同步移動的,於是 a[i]=*p這一賦值沒有任何作用,等效於自己給自己複製,最終的值還是原始的初始化值。

於是a[2] =6

輸出6 選a

13樓:小神馬

就是6呀,*p++是先取p的地址所對應的值,再自加,p一開始指向a(0),根據迴圈後a(2)的值還是6

14樓:弒緋

這道題的根本是你要弄懂2點:int *p=a;和*p++

1、int *p=a可以分開來看int *p;p=a;意思是先定義一個int型的指標p,再將陣列a的一個元素的地址賦值給指標p。注意:p被賦值的值是元素a[0]的地址,而不是a[0]的值。

2、*是指標申明符號。在定義指標的時候,如int *p,只是單純為了讓你區別正常變數和指標。但是如果單獨出現,如改動題中int *p=a;printf("%d",*p); 這時的*p所代表的是p這個指標所指地址的值,在題中就a[0]的值。

3、你還要理解p+1,這樣的加法意思。p所代表的是陣列a的第一個元素的地址,p+1就代表的就是陣列a的第二個元素的地址,以此類推。

4、弄懂前3後,*p++就好理解了,它可以看作是*(p++)這裡的括號不是表示優先順序的意思,而是指(p++)是個整體,p++可以看成p+1。但是這裡的加1要等到賦值完以後(原因是a++和++a的區別)。所以根據for迴圈,*p++實際上是指原陣列a的a[0],a[1],a[2],a[3]。

這4個元素的值。然後賦值給新的陣列a

5、最後要求輸出陣列a的第3個元素a[2],這裡就是6

一個C語言的題目,一個c語言題目

include main if sum i printf i 鑑於lz說還沒自學到for,那樣的話,應該也不會用函式,陣列之類的東西,所以只能寫的這麼複雜了。include int main i 1 if sum n 判斷是否是完數,是則列印。printf n sum 0 return 0 執行結果...

c語言中定義動態一維陣列的函式,然後在主函式中使用

如果要獲取記憶體地址,你上面那種函式獲取方法是錯誤的.函式中int a僅僅是主函式變數ff的一個副本,ff當初沒有具體指明地址,傳遞給a也是不確定地址,a分配完畢,只是修改a自身指向,並不修改ff指向.所以用下面方法進行修改,採用返回地址方法 include 包含標頭檔案 include int a...

簡單的c語言問題,一個簡單的C語言問題

在c語言中a b c這種寫法是不對的 應該寫成a b b c 在你的演算法中a b c的值不確定 當a小於b時 if a b c 就會變成if 0 c 所以結果會發生錯誤 好吧 看的我頭大了,要不我給你寫一個 我上次一個就用了個三目運算子就算出來了!你這個程式就是輸出最大數 最小數 平均數 就用了8...