C語言陣列名做函式引數問題,C語言中關於陣列名作為函式引數方面的問題

2021-04-21 10:02:08 字數 3363 閱讀 7419

1樓:匿名使用者

白線處是函式定義,不是函式呼叫

2樓:匿名使用者

可以有三種寫法

int array

int array[10]

int* array

c語言中關於陣列名作為函式引數方面的問題

3樓:匿名使用者

不知道你說的第2,4,5語句對應的是什麼。。。。

幫你解釋為什麼是1:

當你呼叫fun(a,b,s);

傳進的引數實際上是:&a[0], &b[0], s變數的值(實際上也就是&a[0])

現在我們把fun的形參換個名字  fun(int *p1, int *p2, int *p3)

進入fun時 p3 = s ,即p3 = &a[0].

你呼叫malloc時返回的值是一個int*,實際上 p3 = malloc返回的新指標p4

*p3=*p1+*(p2++)   即  *p4=*p1+*(p2++);

看到錯誤了嗎,p4並不是s,你算出來的值賦值到malloc返回的指標p4指向的記憶體了。

你想p3(即你的s)拿到計算的值,請把s=(int*)malloc(sizeof(int) );這句去掉。

另外malloc出來的記憶體是需要釋放的,請呼叫free釋放,不然程式不退出的情況下記憶體會佔用。

4樓:白花戀歌

因為c語言函式採用的是傳值呼叫,指標作引數時傳遞給函式的我們給個命名比如s',這時s'==s,然後申請了一塊動態記憶體,申請成功的話會把指標傳遞給s',然後*s『=*p1+*(p2++),所以。。。會產生記憶體洩漏。。。還有就是申請動態記憶體之後一定要檢查申請記憶體是否成功,加一個null判斷

至於你說的第二句和第四句不知道你說的是什麼,以上都是猜測,你參考下吧至於s,它一直指向的是a[0],沒有變過

你要改的話就直接刪除掉動態記憶體那一句,這樣的話,s和s'都是指向a[0]的,當a[0]改變了的時候,s讀取那段記憶體也會得到改變後的值,不過這樣的話a[0]也會由1變成11

5樓:主從報警系統

主程式中的s和fun程式中的s完全是兩個毫不相關的指標變數,你可以看成是int *s_m和int *s_f

s_m指標在fun程式呼叫的那一時刻出來打了下醬油(用來賦值給s_f:s_f = s_m;),後來在fun程式體中:s=(int*)malloc(sizeof(int) ); 這一句的時候,s_m被拋棄了,此時s_f 指向新申請的動態空間了。

6樓:寂寞土人

s=(int*)malloc(sizeof(int)這句分配了一個動態地址,所以已經把指向改變。所以執行fun函式後s的值沒變

c語言,陣列名作函式引數問題。

7樓:匿名使用者

肯定要考慮陣列大小啊,不然源陣列有5個元素,但你在被調函式中不知道陣列長度為5,對第6個元素進行了操作,就會發生錯誤了.

8樓:匿名使用者

這個..因為其實是一個指標嘛..不指定的話..你就不知道邊界了...

如果永遠做++的話..那麼陣列會按照型別所佔用的記憶體指下去..

9樓:匿名使用者

應為c語言的規則就是

先定義然後才能分配空間

10樓:匿名使用者

因為用陣列做引數會可以修改引數,不考慮大小的話會有越界..

11樓:匿名使用者

這道題剛剛做到了,正確答案是c

牛客網大佬給出的解答,a,必須在主調函式中說明此陣列的大小,不一定例如傳遞一個char型別的字串,就不需要。所以a是錯的

12樓:仁沉勤禾

a是陣列名,也就是陣列的首地址,a+1就是a[1]的地址,等價於&a[1].前面加一個星號就是取該地址的值啦,也就是元素a[1]的值。

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

13樓:行了我

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

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

14樓:膽市倨

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

所以是第於是地址傳遞。

15樓:匿名使用者

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

c語言陣列名與函式引數的問題

16樓:匿名使用者

float array[10] 表示一個 陣列du, 內有 10個數

zhi據dao.。回。。 printf("inpyt 10 scores:\n"); 表示 螢幕 輸出「 input 10 scores:」。 這個程式

答 要求 輸入十個 資料 ,然後計算機 輸出這是個資料的 平均數。

17樓:匿名使用者

score是陣列名,其實就一指標array在函式裡面也是陣列名,也可以寫成float* array,其實是傳入score的指標指向的地址,函式裡對array的操作是可以影響到主函式的score陣列的

18樓:匿名使用者

array 和 score

c語言中陣列名作為函式引數

19樓:閲庢瘮餜槂

因為你從主函式傳過來之後,是給了a[10]啊,與arrlen無關啊,而且在呼叫函式時是會給區域性變數重新分配記憶體,但這也只是說原先那個記憶體消失了,那麼記憶體裡面的值也會消失了,就會重新執行rrlen=sizeof(a)/4

20樓:毛夏止雨

函式定義和宣告的引數應該是:

intoid_check(struct

snmp_seq

sp,struct

rmc1207

*ramp,

intbuffer_size);

函式呼叫:

flag=oid_check(sp,

ramp,

buffer_size);

在這裡,

ramp

是結構體陣列的指標

c語言中二維陣列它的陣列名是a那a和a有什麼

對於二維陣列名a和 a,二者的區別在於型別不同。對於type a m n 當使用a時,可以等同於二級指標type 型。而使用 a時,等同於type 型。從概念上說,a表示二維陣列a的首地址,而 a表示二維陣列a第一行a 0 的首地址。這樣在使用的時候就有所區別。比如 對a的操作a 4 表示a的第四行...

C語言陣列問題

退格換行吧 為了陣列輸出是5行5列啊 陣列是從a 0 開始記的 所以到a 4 就有5個了 程式中i控制行,j控制列,5行5列的矩陣,要在j 4時換行,if j 5 4 的意思是當j除以5的餘數為4時,執行後面的語句。在這裡 j 5 4等價於j 4 j從0開始數,數到4就剛好是5個數了。當j 5 4的...

在C語言中,陣列名是常量,不能對這進行和運算,由代表它的首地址

地址賦值 自加自減陣列名 指標 自增 自減 第四個空題意不明 陣列由陣列名代表它的首址 陣列名本身只有一個存放地址,不存在首址的問題儲存陣列首址需要用指向指標的指標 如陣列名是a 則 type a a即可 1空 地址 2空 賦值 3空 移動 4空 為什麼c語言中,陣列名是一個地址常量,不能對它進行賦...