亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將數組作為參數傳遞給C中的函數

將數組作為參數傳遞給C中的函數

C
拉風的咖菲貓 2019-07-20 09:58:57
將數組作為參數傳遞給C中的函數我編寫了一個包含數組作為參數的函數,并通過傳遞數組的值來調用它,如下所示。void arraytest(int a[]){     // changed the array a     a[0]=a[0]+a[1];     a[1]=a[0]-a[1];     a[0]=a[0]-a[1];}void main(){     int arr[]={1,2};     printf("%d \t %d",arr[0],arr[1]);     arraytest(arr);     printf("\n After calling fun arr contains: %d\t %d",arr[0],arr[1]);}我發現雖然我在打電話arraytest()函數通過傳遞值來實現,該函數的原始副本是int arr[]都變了。你能解釋一下為什么嗎?
查看完整描述

3 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

將數組作為參數傳遞時,

void arraytest(int a[])

意味著與

void arraytest(int *a)

所以你修改main中的值。

由于歷史原因,數組不是一流的公民,不能按值傳遞。


查看完整回答
反對 回復 2019-07-20
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

在C中,除了少數特殊情況外,數組引用總是“衰變”到指向數組的第一個元素的指針。因此,不可能“按值”傳遞數組。函數調用中的數組將作為指針傳遞給函數,這類似于通過引用傳遞數組。

編輯:有三個這樣的特殊情況,數組不會衰減到指向其第一個元素的指針:

  1. sizeof a

    sizeof (&a[0]).

  2. &a

    &(&a[0])

    (與

    &a[0]).

  3. char b[] = "foo"

    char b[] = &("foo").


查看完整回答
反對 回復 2019-07-20
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

如果你想將一維數組作為函數中的參數傳遞。,您必須以下列三種方式之一聲明一個正式參數,而這三個聲明方法都會產生類似的結果,因為每個方法告訴編譯器將收到一個整數指針。.

int func(int arr[], ...){
    .
    .
    .}int func(int arr[SIZE], ...){
    .
    .
    .}int func(int* arr, ...){
    .
    .
    .}

因此,您正在修改原始值。


查看完整回答
反對 回復 2019-07-20
  • 3 回答
  • 0 關注
  • 733 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號