C 中函式傳遞陣列的問題

2021-10-07 14:31:22 字數 1219 閱讀 8887

本人目前在自學c++,在學習結構體時碰到了乙個小問題,先來看問題:

案例描述:

設計乙個英雄的結構體,包括成員姓名,年齡,性別;建立結構體陣列,陣列中存放5名英雄。

通過氣泡排序的演算法,將陣列中的英雄按照年齡進行公升序排序,最終列印排序後的結果。

五名英雄資訊如下:

,

, ,

, ,

下面是我第一次寫的**,我在sort_hero函式內部計算了傳入arr引數的長度

那麼問題又來了,為啥我一開始傳入的arr不好使呢?講道理如果**二好使的話,就說明傳入的arr是沒有問題的,也就是說我可以通過我傳入的arr獲取到各個英雄,而且還有個問題,我傳入的arr,我在函式內操作的不是區域性變數麼,會什麼會影響到我的主函式?

這裡面有兩個問題:

1.為何方法一不好使?

2.為何主函式中的arr也會改變?

其實只有乙個原因,這可以解決上面兩個問題的疑惑

那就是:傳遞陣列名是傳遞陣列首元素的位址,我錯把python的思想沿用過來了,既然傳遞的是位址,那函式內計算sizeof(arr)為0,但是如果你在主函式那邊使用sizeof(arr),就可以得到陣列的大小,因為前者的arr是位址,後者的arr是陣列名,而且你改變了函式內的arr,其實是位址上的值改變了,那自然也就變了。

c語言 函式傳遞陣列問題

題目 定義乙個函式,使用二維陣列作為傳入引數,在主函式中輸入4 4的二維陣列,呼叫已定義的函式,把該矩陣傳入,在主函式中輸出結果。函式功能 使二維陣列中兩條對角線上的元素均為1,其餘元素均為0。解 include include intdiagonal assignment int a 4 4 el...

C 中函式傳遞陣列的探索

乙個c函式可以把陣列作為形參,在c 具體表現形式有三種 void func int para void func int para 20 void func int para 這三種形式雖然表現不同,在c 中都看成相同的,等價於void func int para 在傳遞實參時,陣列名被隱式轉換成指...

C 傳遞陣列的問題

先看下面的 include using namespace std void testarrayarg int a int main cout in main.endl cout array address a endl cout array size sizeof a endl cout arra...