簡體   English   中英

將數組指針傳遞給C中的函數

[英]passing array pointer to function in C

在我的main()函數中,我初始化數組指針*AD並使用for循環將數組A[5]的地址復制到指針AD[5] 當我將此指針AD傳遞給函數row1()並將其所有值(在AD中)分配給I[5]我得到的是A[5]的實際值而不是地址。 另一方面,當我在main()打印AD[5]指針的值時,我得到了地址。 我正在使用DEV c ++編譯器。

為什么在函數中我得到真實的價值?

#include <stdio.h>
int main(void)
{
    int test;
    int A[5];
    int *AD[5];
    FILE *fpc;
    fpc=fopen("testing.txt","r");
    fscanf(fpc,"%d",&test);
    int i;
    for(i=0;i<test;i++)
    {
        int j;
        for(j=0;j<5;j++)
        {
            fscanf(fpc,"%d",&A[j]);
            AD[j]=&A[j];
            printf("%d   ",AD[j]);

        }
        puts("");

        row1(AD[0]);    
    }
}

void row1 (int AD[0])
{
    int I[5];
    int i;
    for(i=0;i<5;i++)
    {
        I[i]=AD[i];
        AD[i]=AD[i]+1;
        printf("%d,        ",I[i]);
    }   
    puts("");
    puts("");
    puts("");
    puts("");
}

如果要傳遞一個指針數組,則函數聲明及其調用將類似於

void row1 (int *AD[] );

//...

row1( AD );    

考慮到必須在調用函數之前聲明該函數。

至於功能本身,則不清楚您要在功能內實現什么。

同樣因為數組AD是指針數組,所以您應該在printf函數中使用格式說明符%p

printf("%p   ",AD[j]);

聲明...

int *AD[5];

...聲明AD為五個指向int指針的數組。 您可以使用指向A的相應成員的指針來初始化每個成員(這看起來很浪費,但是不管用什么)。

您稍后執行此調用:

    row1(AD[0]);    

很好:它將AD的第一個元素傳遞給函數。 由於AD[0]是指向A[0]的指針,所以它們等效於以下任意一個:

    row1(&A[0]);    
    /* or */
    row1(A);    

特別要注意后者。

現在,函數row()的聲明如下:

void row1 (int AD[0])

這似乎將函數參數AD聲明為一個零個int s的數組,這將是無效的,但實際上,函數參數聲明中的數組長度會被忽略。 該聲明等效於以下任何一個:

void row1 (int AD[])
/* or */
void row1 (int *AD)

這是與你逝去的說法一致,但要注意, AD的功能row1()是區別於ADmain() 他們有不同的和不兼容的類型

在功能row1()您有...

    I[i]=AD[i];

...您將值由指針指向 AD + i 設置方式的方式,可以得出可以在main()表示為A[i]的值。

如果確實要打印指針本身的表示形式,則可以在row1()這樣做,如下所示:

int i;
for (i = 0; i < 5; i++) {
    printf("%p,        ", AD++);
}

請注意,它是指針本身被打印,而不是它所指的東西。 還請注意,這取決於它的正確性,取決於main()初始化(其) AD

另外,您可以像這樣重寫row1()

void row1 (int *AD[])
{
    int i;
    for(i = 0; i < 5; i++)
    {
        printf("%p,        ", AD[i]);
    }   
}

然后從main()調用它,如下所示:

row1(AD);

請注意,您傳遞的是整個數組,而不僅僅是單個元素。 如果您不能依靠main()AD成員作為指向數組中連續成員的指針,那是唯一的選擇。

暫無
暫無

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

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