C語言為什麼呼叫函式的時候沒有指標,還是可以交換主函式的陣列的值

2021-03-27 20:15:50 字數 3996 閱讀 3650

1樓:聽不清啊

這是因為 bsort() 的第乙個引數是 int a它是乙個陣列。呼叫時以 陣列名 height 作為實參。

在c語言中,陣列名,既是乙個陣列的識別符號,height[i] 可以直接引用它的陣列元素,陣列名還表示陣列的首位址,也是指向陣列首位址的指標。所以,呼叫函式的時候還是使用了指標的。

程式中的函式

void bsort(int a, int n)與void bsort(int *a, int n)是完全等價的,可以直接替換(下面的函式體不需要改動)。

2樓:做而論道

呼叫函式時,引數,是個陣列,這也就相當於指標。

3樓:黃5帝

為什麼非要指標呢?用乙個中間變數也是可以的啊。

指標和中間變數的區別就是指標不改變內容,中間變數是改變變數的內容。

4樓:老鹹魚

(´இ皿இ`)路過,討積分

c語言呼叫函式時,引數傳的是字串,並沒有傳字串指標,為什麼主函式中的值還是會變化?

5樓:奮鬥

在c語言中,字串是以字元陣列的方式儲存的,而陣列的本質就是指標;

因此,傳進去乙個字串,就是把它的位址傳去了。

6樓:匿名使用者

c語言中字串陣列的名字就代表該字串的首位址。所以傳的是位址不是值的拷貝。

為什麼c語言中,陣列可以用void呼叫,既然沒有返回值,為什麼在主函式中,陣列值還是會變 ,

7樓:暮影

要清楚值呼叫

和位址調copy用bai的區別, void sum(int x,int y){};這種是位址調du用,是不會zhi

影響到實參的dao

值的,要是按照位址呼叫(指標呼叫),是共享同乙個存貯空間的,也就是改變的是同乙個記憶體裡面的內容,陣列名的呼叫,就是指標呼叫的一種,int arr(int array,int n){},你在函式裡面改變array的值,實參裡面也會改變的

c語言中呼叫函式的返回值,如果是陣列,主函式要輸出這個陣列怎麼實現啊

8樓:大野瘦子

用指標抄,另外儲存資料的變數襲

退出函式時不得bai消失。

例如:du

#include

int * fun(int n)

void main()

得 0 1 2 3 4

注意事項

1、陣列的維度必須是乙個常量表示式

int main(void)

2、預設情況下,陣列的元素被預設初始化。

而且需要注意的是,和內建型別的變數一樣,如果在函式內部定義了某種內建型別的陣列,那麼預設初始化會令陣列有未定義的值。

9樓:

一般用 函式的 引數傳遞。

如果要通過函式返回值傳遞,可以用指標,另外儲存資料版的變數退出函式時不得消權失。

例如:#include

int * fun(int n)

void main()

得 0 1 2 3 4

10樓:匿名使用者

沒看見過這種用法,如果你的陣列是區域性變數,不能作為返回值,因為函式返回陣列就被釋放掉了(棧記憶體)

如果是全域性變數陣列,對陣列操作的同時資料已經發生改變,不需要返回

如果是動態陣列,以指標型別返回

11樓:

int * func()

void main()

...}

為什麼c語言中陣列中的元素交換函式不用指標,而整形變數需要?

12樓:

因為陣列名就是指標,當然c語言是這樣的,並不是所有語言如此。。。

13樓:匿名使用者

第二個將函式改為 void swap2(int *i,int *j)

c語言用指標和自定義函式實現陣列元素的調換 20

14樓:古神孤鴻

#include

#define n 10

void swap ( int *a, int *b, int n);

int main(void)

void swap (int *a, int *b, int n)}

c語言:我使用子函式將指標變數中的指標進行交換,但是為什麼所指向的變數卻沒有變?程式如下:

15樓:gta小雞

c語言中的任何函式形參都是值傳遞

。所謂引用傳遞,不過是指標的值傳遞而已。

你的函式做的工作只是交換函式中的兩個臨時變數a和b的值,結果不會影響到外部的實參pa和pb。如果想要交換兩個指標的值,你的形參應該為兩個二級指標。

求大神解答錯誤 c語言中如何不用指標交換兩個變數的值 為什麼a,b的值不能回到主函式

16樓:匿名使用者

程式本bai

身就有問題,按du照你寫的程式zhi的意思,應該是要交dao換兩個程式回的值,而按照c語言的實答現方式必須要用到指標不可,程式可以按照以下的方式實現,兩個陣列的長度必須相同,否則會出現陣列下標越界的錯誤

void swap(int a,int b,int n)//此處的陣列已經被弱化成了指標

return;

}int main()

;int b[5] = ;

swap(a,b,5);

printf("%d,%d

",a[0],b[0]);//列印出陣列a和陣列b沒有意義return 0;}

17樓:匿名使用者

實參是指標型別,而形參為整型,型別不一致,出錯!修改swap函式如下:

void swap(int *a,int *b)

c語言呼叫完void函式後如何將值返回主函式實現輸出的呢? void函式沒有返回值。。。是陣列不同

18樓:岔路程式緣

1、來c語言呼叫完void函式後如何自將值返回主函式實現輸出的呢?

答:因為 void函式沒有返回值,要想把讓函式的值帶回主函式,還有兩種辦法,第一是使用指標做引數,第二是瀠陣列做引數。

2、用指標傳遞就可以了嗎,那如果不用指標呢?

答:用指標當然可以啦。如果不用指標,那就選擇用陣列引數了。

19樓:匿名使用者

我看到你對一條回答bai的追問,感覺可能duget到你的點了zhi。

#include

void increase(int *a)int main(int argc, char *argv)上面這個

dao函式最後輸出回的值是12.

void increase(int *a)這個函式傳入的是指標,答a這個引數在increase函式呼叫結束後確實就會被釋放,但a是乙個指標,釋放的是這個指標!但是你仔細看increase這個函式體裡,已經對a這個指標指向的內容做了更改:*a = *a + 1; 我們修改的並不是a而是a指向的內容也就是h的值,所以h的值已經被改變了!

20樓:匿名使用者

可以考慮讓呼叫者提供乙個存放結果的陣列起始位址,函式將結果儲存在陣列中

21樓:匿名使用者

通過全域性變數實現修改

通過函式的指標引數完成返回

通過函式的引用引數完成返回

也可以把陣列作為引數直接在函式中修改

22樓:三城補橋

因為語法就是這樣啊,函式呼叫直接使用其函式名即可,函式是void型別只是標識該函式沒有返回值而已。

23樓:匿名使用者

把void函式換成傳值函式吧

c語言函式呼叫引數傳遞的是什麼,C語言函式呼叫引數傳遞的是什麼

c語言傳遞的是值而不是位址,這一點從vb轉過來的程式設計師一定要注意。否則不經意間就會犯錯誤。另外下層函式修改上層函式變數不是一種好習慣,容易引發錯誤。c語言中函式可以返回乙個函式值,如果你需要返回多個函式值可以用下面的形式 fun int a,int b main 如果按vb的習慣,fun int...

C語言函式呼叫的問題

主函式的a作為輸入引數輸入給函式aaa進行計算,計算後a的值不發生變化。這是c語言的基本規則。從編譯原理角度講,輸入aaa的只是a的值,並不是a所在的暫存器或位址,a的值輸入aaa後,該值被存放在另乙個臨時暫存器或位址,發生改變的是這個臨時暫存器或位址的值,而非a所在的暫存器或位址的值,所以,a的值...

C語言指標建立函式問題,C語言指標呼叫函式問題,急求解釋(本題是《c和指標》上的題目)

第乙個表示傳遞graphadjlist型別的引用g,第二個表示傳遞graphadjlist型別的指標g 另外這是c 不是c。c語言指標呼叫函式問題,急求解釋 本題是 c和指標 上的題目 c語言指標作函式引數時的返回問題 首先,弄懂函式引數都是靠值傳遞。指標也是。進入函式後,函式建立幾個空間給形參,再...