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語言中,陣列名是一個地址常量,不能對它進行賦...