c語言大神們能給我仔細講講這題嘛,它給出 aa 3 有什麼意義啊?

時間 2021-05-29 22:48:35

1樓:szouc

涉及到的知識點主要有兩個難點,一是陣列作為引數如何傳遞,二是下標運算子的使用。

先說第乙個,陣列無法作為引數傳遞,C語言中函式引數只能是標量資料,也就是只有乙個值的資料。陣列的傳遞事實上是指標的傳遞,因此陣列作為形參時根本就不是陣列,只是樣子像而已,形引數組完全沒有陣列的性質,可以試試改變形引數組的陣列名,如陣列名++,完全沒問題。

其次下標運算子並不是陣列獨佔,下標運算子要求兩個運算元乙個是指標另乙個是整數就行。下標運算子表示式 a[b] 的作用等同於(就是) *(a + b),因此在C語言中可以寫成 1[a]。

題中具體邏輯提問者應該熟悉,個人估計是這兩個知識點帶來的疑惑。

2樓:打不過野我要吐了

首先,你圖里的sort函式就是讓陣列裡n個數排成降序比如123456

降序654321

這個函式呼叫說人話就是這個sort函式的排序我現在就想用aa[3]當做我的起點,而且我只想排序n(n=5)個數

圖里的陣列是

1 2 3 4 5 6 7 8 9 10

那aa[3]=4

從aa[3]開始包括自己選五個數

降序排列

然後整個陣列就是

1 2 3 8 7 6 5 4 9 10

你要嫌長的話就別看下面了

sort函式:傳入乙個陣列a,傳入乙個整數n為排序的範圍氣泡排序,然後降序排列

到主函式,有乙個從1到10的aa陣列

然後呼叫這個sort函式

首先,雖然在sort中第乙個引數是陣列,但其實傳遞進去的陣列的首位址,比如你就最簡單的傳入乙個aa,那你就是傳入了這個陣列的首位址,而陣列第乙個元素的位址就是陣列的首位址,所以你傳入aa,就等於你傳入了&aa[0],陣列在儲存上是順序儲存,也就是從aa[0]到aa[9]都是連線在一起的,那麼在陣列中的每乙個元素都會擁有自己的位址,比如aa[0]的位址是1,那aa[1]的位址就是5(int型別長度為4),以此類推aa[2]就是9。。。等等

那現在在sort函式的第乙個參傳入乙個&aa[3]&←這玩意是取址符,作用就是得到乙個該變數的位址那傳入的&aa[3]就是傳入的aa[3]的位址所以說用aa[3]做起點,選n個數排序

3樓:睡懶覺的花布

1自定義函式sort作用: 實現陣列元素從大到小的降序排序,採用演算法應該屬於選擇法;注意,用sort來排序的陣列特點: 首元素位址存在形參a中,參與排序的元素個數存於形參n中。

2函式呼叫處的實參:&aa[3],5

第二個引數不用說;第乙個引數就是陣列元素aa[3]的位址。展開:記憶體空間是一維的,陣列aa中的元素從前往後乙個挨著乙個佔據著記憶體。

參考公共澡堂的浴室櫃(豎著看一列即可,記憶體是一維的),最上邊的櫃子是首元素,以此類推。每個櫃子有個編號(位址)。

3函式定義處的形參:

第二個形參不用說;第乙個形參長著陣列的樣子。形參要能接受實參傳給它的資料。本題中實參把元素位址傳給形參a,那麼a須屬於能接受位址的資料型別,指標變數?

事實上系統正是把a當指標變數處理的(同int *a)。

形參實參結合後,a指向了元素aa[3],實參5傳給形參n。參考上面分析1,通過自定義函式的執行,實現對從aa[3]開始的5個元素的降序排序(其餘元素值不變,還待在它們的「櫃子「裡)。

4最後將發生變化的陣列aa元素全部輸出。

分析完了。涉及主要知識點:

指標變數

指向一維陣列的指標

排序演算法

敲了半天,希望有幫助。

4樓:普通少年pro max

對於C語言中陣列來說,其儲存方式為順序連續儲存,即有一塊連續的記憶體用來儲存陣列的元素,這一塊內容都是這個陣列的,簡單來說,陣列元素個數表示了這塊記憶體有多少個「基本單元」,每個基本單元的長度是陣列型別的基本長度,例如int型陣列,每個基本單元都是int型別在該系統下的長度。

對於位址型別的運算,和指標一樣,所謂+1與-1,實際上是1*sizeof(type),type是int、char等型別,這就可以保證, 只要拿到陣列首位址,就可以通過不斷+1來準確的訪問到每個元素的位址。

如果你取到了中間某個元素的位址,向前可以訪問他前面的元素,向後可以訪問他後面的元素(只要保證不越界),這樣就是實現了一種「子陣列」。

對於陣列元素的訪問,可以使用下標運算,在i沒有越界時,a[i]訪問的是第i-1個元素的值,注意是值,那麼你想訪問這個地方的位址怎麼訪問?

取位址運算子,因此&a[i]訪問的是第i-1個元素儲存的位址。如果採用位址方式

所以題中&aa[3]表示取的是第四個元素的位址。

函式引數表示乙個是個陣列位址,第二個表示陣列長度,或者說要排序的長度。同時,sort函式就是從給定的陣列位址開始向後訪問,然後降序排序。

在呼叫時,把aa的第四個元素的位址作為陣列位址傳遞進去,並規定向後訪問的元素個數是5,那麼顯然,sort函式只會對aa陣列第4、5、6、7、8這個5個元素進行排序。

排序後輸出結果就是中間這5個被調轉了順序,其餘保持不變。

5樓:別動我的蠟燭

首先讀一下sort函式是幹嘛的,這個比較明顯,傳入乙個陣列a,陣列a的元素個數n,然後將陣列a的n個元素進行從大到小排序。

所以如果我想呼叫sort函式給aa陣列排序,那麼就寫sort(aa , 10)就行了。

不過,陣列名其實就是陣列第乙個元素的位址,所以sort(aa , 10)也等價於sort(&aa[0] , 10)。

所以,這個sort(&aa[3],5)是啥呢?就是將元素首位址為&aa[3],總共有5個元素的陣列進行排序。所以被排序的元素有aa[3] , aa[4] , aa[5] , aa[6] , aa[7],也就是

因此,呼叫之後陣列aa就變成了1,2,3,8,7,6,5,4,9,10

p.s. 2023年了還有void main啊-。-

求大神詳解一下c語言題目?

宇佐見蓮子 首先,作用域 中如果出現了兩個a,以層數最少的為準。所以在main中定義的a會在main作用域中把全域性那個等於0的a覆蓋。從而,在main作用域中的printf函式使用的a是等於20的a。其次,change函式的引數使用值傳遞形式,也就是說在change函式中的變數a修改了,但不影響到...

求問c語言大神,這個迴圈應該怎麼理解

醉臥沙場 這只是乙個最簡單的二層迴圈,外層迴圈每遞進一次,將內層迴圈從頭到尾執行一遍,直到整個迴圈結束。建議你自己根據邏輯逐一帶入數值自己算一遍,如果這都需要別人掰開揉碎了乙個數乙個數的講,那這個專業不學也罷 波羅學 這種問題沒什麼好理解的。要清楚步驟,一步一步按流程走就好了。給你簡單演示一下,提個...

明日方舟的dalao們,能給我這號來點建議嗎?

soft 這個號的練度已經很強了前面有兩個回答看你回覆了,真的那倆人說的一點用都沒,四星你這裡有很多上位代替下位就不用花資源練了,建議給6星專技能就行 傅聞川 題主,你可別聽有些人說四星好多好牛的可以練,事實上你這個號的練度,很多五星六星都有,很多四星壓根沒必要練,使用起來也不會有高星好使,也就僅僅...