簡體   English   中英

main() 中的數組在函數中發生變化

[英]Array in main() changes in a function

我有一個程序來排序一些數字:

#include <stdio.h>
void sort(int x[], int sizeArr){
    int i,j,temp=0;
    for(i=0;i<sizeArr;i++){
        for(j=0;j<sizeArr-1;j++){
            if(x[j]>x[j+1]){
                temp=x[j];
                x[j]=x[j+1];
                x[j+1]=temp;
            }
        }
    }
}

int main()
{
    int data[]={5,1,2,4,3};
    int sizeArr = sizeof(data)/sizeof(data[0]);
    int i;
    printf("Data Array\n");
    for(i=0;i<sizeArr;i++){
        printf("Data no.%d= %d\n", i+1, data[i]);
    }
    printf("\n");
    sort(data,sizeArr);
    printf("Data Array\n");
    for(i=0;i<sizeArr;i++){
        printf("Data no.%d= %d\n", i+1, data[i]);
    }
    return 0;
}

結果:

Data Array
Data no.1= 5
Data no.2= 1
Data no.3= 2
Data no.4= 4
Data no.5= 3

Data Array
Data no.1= 1
Data no.2= 2
Data no.3= 3
Data no.4= 4
Data no.5= 5

還有一個類似的程序,但沒有數組:

#include <stdio.h>
void sort(int x){
    x=5;
}
int main()
{
    int data=3;
        printf("Data = %d\n", data);
    printf("\n");
    sort(data);
        printf("Data = %d\n", data);
    return 0;
}

結果:

Data = 3

Data = 3

我想問的是:

  1. sort() 中x[]數組的變化如何影響 main() 中的data[]數組?
  2. 為什么x變量不會影響第二個程序中的數據變量?
  3. 是否可以使x[]數組獨立於data[]數組?
    如果這是一個愚蠢的問題並且我的英語不好,我很抱歉。 謝謝。

對於 1, x是指向內存塊的指針。 在函數內部和外部引用相同的內存,因此如果您更改函數內部的內存,您將在函數外部看到相同的更改。

對於 2, x是傳遞給函數的 3 的副本 x內部的x和函數外部的data指的是內存中的不同位置。 x = 5更改x內存位置中的內容,但由於該內存只是data保存內容的副本,因此不會影響data

對於 3,您需要制作數組的副本。 這可以通過創建第二個數組然后使用循環將每個元素復制到新數組來手動完成,或者您可以使用像memcpy這樣的函數。


要記住的一個關鍵是,您傳遞給函數的任何內容都會被復制。 如果您傳遞一個指針,則該指針將被復制,但是當通過執行x[j]類的操作取消引用時,地址的副本仍然是相同的地址。 如果您傳入一個整數之類的東西,該整數將被復制,因此重新分配它不會在函數之外產生任何影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM