1樓:閲庢瘮餜槂
因為你從主函式傳過來之後,是給了a[10]啊,與arrlen無關啊,而且在呼叫函式時是會給區域性變數重新分配記憶體,但這也只是說原先那個記憶體消失了,那麼記憶體裡面的值也會消失了,就會重新執行rrlen=sizeof(a)/4
2樓:毛夏止雨
函式定義和宣告的引數應該是:
intoid_check(struct
snmp_seq
sp,struct
rmc1207
*ramp,
intbuffer_size);
函式呼叫:
flag=oid_check(sp,
ramp,
buffer_size);
在這裡,
ramp
是結構體陣列的指標
c語言中,陣列名作為函式引數,屬於什麼傳遞,為什麼?
3樓:行了我
c語言中,陣列名作為函式引數,屬於陣列引數傳遞。在vb6.0中,允許使用陣列作為實參傳遞到子過程的形參中,陣列傳遞必須採用地址傳遞的方式來傳遞引數。
陣列型變數名本身只是該陣列所佔儲存空間的首地址,函式呼叫時,系統不會為形參分配陣列儲存空間,而是僅僅分配一個存放陣列地址(第一個元素地址)的儲存空間,此後,將實引數組的首地址傳遞給形參變數。
4樓:膽市倨
屬於地址傳遞,在函式裡修改的話,將直接影響呼叫方的數值。這是因為陣列名代表這個陣列的首地址,不過是靜態不可更改的而已。在函式裡用引用[i]下標時,就是找到這個陣列第i號元素的地址進行修改的。
所以是第於是地址傳遞。
5樓:匿名使用者
你要記住,所有傳遞給函式的引數都是通過值傳遞方式進行的。陣列名作為函式引數也不例外。
c語言中關於陣列名作為函式引數方面的問題
6樓:匿名使用者
不知道你說的第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釋放,不然程式不退出的情況下記憶體會佔用。
7樓:白花戀歌
因為c語言函式採用的是傳值呼叫,指標作引數時傳遞給函式的我們給個命名比如s',這時s'==s,然後申請了一塊動態記憶體,申請成功的話會把指標傳遞給s',然後*s『=*p1+*(p2++),所以。。。會產生記憶體洩漏。。。還有就是申請動態記憶體之後一定要檢查申請記憶體是否成功,加一個null判斷
至於你說的第二句和第四句不知道你說的是什麼,以上都是猜測,你參考下吧至於s,它一直指向的是a[0],沒有變過
你要改的話就直接刪除掉動態記憶體那一句,這樣的話,s和s'都是指向a[0]的,當a[0]改變了的時候,s讀取那段記憶體也會得到改變後的值,不過這樣的話a[0]也會由1變成11
8樓:主從報警系統
主程式中的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 指向新申請的動態空間了。
9樓:寂寞土人
s=(int*)malloc(sizeof(int)這句分配了一個動態地址,所以已經把指向改變。所以執行fun函式後s的值沒變
在c語言中,用陣列名作為函式呼叫時的實參,實際上傳遞給形參的是____________。
10樓:足壇風行者
首地址。
因為陣列名傳遞的是陣列的地址也就是第一個元素的地址。例如:
a[3]這個陣列,3指個數,a[0]指第一個元素,全部元素指a[0]~a[2];那陣列名a規定的就是首地址。
擴充套件資料
c語言中函式引數傳遞的三種方式:
1、傳值,就是把你的變數的值傳遞給函式的形式引數,實際就是用變數的值來新生成一個形式引數,因而在函式裡對形參的改變不會影響到函式外的變數的值。
2、傳地址,就是傳變數的地址賦給函式裡形式引數的指標,使指標指向真實的變數的地址,因為對指標所指地址的內容的改變能反映到函式外,也就是能改變函式外的變數的值。
3、傳引用,實際是通過指標來實現的,能達到使用的效果如傳址,可是使用方式如傳值。說幾點建議:如果傳值的話,會生成新的物件,花費時間和空間,而在退出函式的時候,又會銷燬該物件,花費時間和空間。
11樓:匿名使用者
實引數組的首地復址。
在用數制組名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體,陣列名就是陣列的首地址,函式得到一個函式值,即為該字元陣列的首地址。
因此在陣列名作函式引數時所進行的傳送只是地址的傳送,也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。
12樓:匿名使用者
陣列名傳遞的是陣列的地址也就是第一個元素的地址 所以選 d
13樓:天雨下凡
選擇d.實引數組的首地址
14樓:匿名使用者
d首地址
~~~~~~~~
15樓:yeara洛
d.實引數組的首地址
c語言中陣列名作為實參傳給被呼叫的函式時,形參獲得的是什麼
16樓:dinah穎
在函式中,之所以陣列的值能夠被修改,就是因為形參得到的是陣列的地址,而不是資料,所以,行參獲得的應該是陣列的地址
17樓:匿名使用者
把陣列作為引數傳遞給函式的時候,並非把整個陣列的內容傳遞進去,此時陣列退化為一個同型別的指標,這個指標的值就是陣列首元素的地址值。
18樓:匿名使用者
c語言中陣列來名作為實參傳給自
被呼叫的函bai數時,形參獲du
得的是陣列的起始地zhi
址。還是用例dao子說話吧。
#include
int *arry(int *a)
return b;
}int main()
;int *c;
int i;
c = arry(a);
for(i=0;i<5;i++) }
主要是通過指標把陣列,例如main裡面的a的地址傳入arry函式,然後在arry函式中用一個相容型別的指標接收地址,然後就可以再這個指標下的地址操作地址上面的資料了。
arry返回的時候也是返回一個指標(地址)。
19樓:匿名使用者
首地址。以陣列名作為函式實參。通過指標可以獲得陣列的元素地址。
c語言中陣列名作為引數有什麼特點
20樓:倒黴熊
陣列名作為引數,在引數的傳遞中 會退化為指標,也就是說 陣列名作為引數,傳遞的是陣列的首地址。
21樓:
陣列名相當於記憶體中 該陣列的首地址
c語言,陣列名作函式引數問題。
22樓:匿名使用者
肯定要考慮陣列大小啊,不然源陣列有5個元素,但你在被調函式中不知道陣列長度為5,對第6個元素進行了操作,就會發生錯誤了.
23樓:匿名使用者
這個..因為其實是一個指標嘛..不指定的話..你就不知道邊界了...
如果永遠做++的話..那麼陣列會按照型別所佔用的記憶體指下去..
24樓:匿名使用者
應為c語言的規則就是
先定義然後才能分配空間
25樓:匿名使用者
因為用陣列做引數會可以修改引數,不考慮大小的話會有越界..
26樓:匿名使用者
這道題剛剛做到了,正確答案是c
牛客網大佬給出的解答,a,必須在主調函式中說明此陣列的大小,不一定例如傳遞一個char型別的字串,就不需要。所以a是錯的
27樓:仁沉勤禾
a是陣列名,也就是陣列的首地址,a+1就是a[1]的地址,等價於&a[1].前面加一個星號就是取該地址的值啦,也就是元素a[1]的值。
c語言中陣列名是地址變數嗎,c語言中陣列名是一個地址變數嗎
結構體名相當於類名,作用也與類名相近似。也可以將結構體名類比為自定義型別名,等同於int,double,float等,通過結構體名定義變數。在c語言中陣列名是一個什麼的常量 陣列名是代表該陣列的首地址且符合識別符號書寫規定的變數識別符號。整個陣列是以首地址開頭的一塊連續的記憶體單元。如有字元陣列ch...
C語言 陣列名作為實參傳遞問題,問題如下
不知bai道你說的第2,4,5語句對應的 du是什麼。zhi。幫你解釋為dao什麼是1 當你調版 用fun a,b,s 傳進權的引數實際上是 a 0 b 0 s變數的值 實際上也就是 a 0 現在我們把fun的形參換個名字 fun int p1,int p2,int p3 進入fun時p3 s,即p...
c語言中陣列元素互換的問題,C語言中陣列元素互換的問題
當index為0時,bai陣列中下標為du0的和下標為4 0的元素交換,也zhi就是第一個和最後一dao個交換,回1,5 交換 當index為1時,答陣列中下標為1的和下標為4 1的元素交換,也就是第二個和倒數第二個交換,2,4 交換 因為此陣列元素的個數為奇數個,所以,最中間那個沒有必要交換,所以...