0

少し混乱しています。次のプログラムを調べてください。

#include<stdio.h>
void display (int *j, int *k);

int main()
{
    int num1[]={1,2,3,4,5};
    int num2[5];
    int i;
    display (num1,num2);
    for (i=0;i<=4;i++)
        printf("%d,", num2[i]);
    return 0;
}

void display (int *j, int *k)
{
    int l;  
    for (l=0;l<=4;l++)
    {
        k=j;
        printf("%d,", *k);
        j++;
        k++;        
    }

}

これprintf("%d,", num2[i]);は配列を与えていません。しかし*k=*j;、関数を入れると機能します。理由を教えてください。ありがとう。

4

4 に答える 4

1

k=jkポインタをポインタの値(指すアドレス)に割り当てますj。これにより、どの配列(num1またはnum2kが指すかが切り替わりますが、配列要素の値は変更されません。

*k=*jを指す配列要素を、をk指す配列要素の値に設定jします。

于 2012-11-23T11:58:10.523 に答える
0

*k = *j「セル」jポイントの内容をにコピーkします。それどころか、どこk = jを指すかを示します。これについて考えると、配列の内容を変更するのではなく、ローカル変数を変更するだけなので、間違っています。したがって、あなたの例では、内部のprintステートメントは実際にはprintではありませんが、(printステートメントの時点で、の要素であるdoと同じ場所を指しています)。kjk = jkdisplaynum2num1kjnum1

于 2012-11-23T11:59:05.243 に答える
0

「に格納されている値をの値としてk = j;割り当てる」という意味のステートメントは、に格納されている値をにコピーするだけです。配列には何もしません。ポインタが。で指すアドレスを指しているだけです。割り当てと増分はローカル変数にのみ影響し、他には何も影響しません。jkjkkjjk

を書くとき*k = *j;、それは本質的に「アドレスの内容をアドレスに割り当てる」ことを意味jしますk。これはコピーを行い、それらをインクリメントして次の配列要素にポイントしますjk

于 2012-11-23T12:00:42.970 に答える
0

配列を初期化していないnum2か、からコピーしていないためですnum1

于 2012-11-23T11:55:39.170 に答える