C語言中,用陣列名作形參和用指標作形參有區別嗎

2021-03-10 21:40:21 字數 724 閱讀 6088

1樓:匿名使用者

還是有差別的 雖然大多數時候都可以相互用最大的差別就是指標可以改版變,可以通過指標改變指向內權容的值,但陣列名不行

舉個例子:(分別作為形參)

int num[10], *p;

p = num;//此時p指向陣列的第一個元素我在主函式裡呼叫兩個函式

1 sum(num);

2 sum(p+2,10);

這就有區別了,因為num陣列首地址它不能變化,但是此時p指向了陣列的第三個元素,而且後面的那個10也是可以改變的,所以說用指標作為形參的時候要帶一個int n 表示你要處理的數的個數,所以說用指標作為形參的話會給你一種假象,它的確是指向的陣列的某個元素(這要看你的指標移動了,比如說p+2等等,陣列名不能移動),但是它僅僅只是一個指標,你可以在呼叫的函式裡用sizeof(num),sizeof(p)求它們的值,就知道為什麼總是要加上一個int n了,因為如果不加的話函式就不知道你要操作的數的個數,另外別忘了傳遞陣列和傳遞一般的int,double等型別是不一樣的,傳遞陣列傳遞的是原陣列,函式的操作就改變了原來的陣列,而傳遞一般的數只是傳遞它的拷貝,對原來的數沒有影響;

還有什麼不懂的繼續交流~~~

2樓:羽葉綠

定義指標p,陣列a[3]=,p=a

其中p的值為a[0]地址,而a[0]的值為1

3樓:淘淘

其實就是沒啥區別,寫法不同。

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

不知道你說的第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...

c語言函式呼叫形參為陣列名的情況

include void sort int a 20 void main sort a 沒問 題bai 我調du試zhi過了 記得dao給回我加分答 c語言函式呼叫方法copy 1 如bai果func是一個已經定義的函式du 2 可以這麼寫zhi daofunc 3 也可以這麼寫,如果func有返回...

C語言中陣列名作為實參傳給被呼叫的函式時,形參獲得的是什麼

在函式中,之所以陣列的值能夠被修改,就是因為形參得到的是陣列的地址,而不是資料,所以,行參獲得的應該是陣列的地址 把陣列作為引數傳遞給函式的時候,並非把整個陣列的內容傳遞進去,此時陣列退化為一個同型別的指標,這個指標的值就是陣列首元素的地址值。c語言中陣列來名作為實參傳給自 被呼叫的函bai數時,形...