-1
#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b;
for( i =0 ; i<5 ; i++)
{
    b[i]=a[i]+1;
    *p=b[i]-1;
    printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);

}
return 0;
}

私は次のように出力したい:

*p   b   a
 1   2   1
 2   3   2
 3   4   3
 4   5   4
 5   6   5

しかし、それは次のように表示されています:

*p   b   a
 1   1   1
 2   3   2
 3   4   3
 4   5   4
 5   6   5        

私でさえ、各a[]に+1を追加しています。ただし、最初の印刷では1つの出力が表示されます。なぜ?

4

4 に答える 4

4

を指すp=b;セット。したがって、はインクリメントされますが、デクリメントされて戻ります。pb[0]b[0]b[i]=a[i]+1;*p=b[i]-1;

于 2013-03-05T14:36:51.820 に答える
1

問題は:

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int *p;
int i;
p=b; // <<---- HERE

p配列の最初の要素をポイントし、b次にこのコードでポイントします。

b[i] = a[i]+1;
*p = b[i]-1;

2最初の要素に値を割り当てますが、*p = b[i]-1;それを再度書き換えます1。これが、出力の最初の行が次の理由です。

1 1 1
于 2013-03-05T14:37:46.017 に答える
1

重要なのは、p=b を設定することです。p と b は両方ともポインターです。つまり、*p と b[0] の両方が同じデータを参照します。

ループの最初の反復では、最初に b[0] に 1 を加算し、次に 1 を減算します。次の繰り返しでは、*p は b[0] と同じですが、値はより高いインデックスから取得されます。

于 2013-03-05T14:46:12.140 に答える
1

これは、プログラムの作業バージョンになります。

#include <stdlib.h>
#include <stdio.h>

int main(void)
{

int a[]={1,2,3,4,5};
int b[]={0,0,0,0,0};
int c[]={0,0,0,0,0}; //another array
int *p;
int i;
p=c; // point p to a new array to write to.
for( i =0 ; i<5 ; i++)
{
    b[i]=a[i]+1;
    *p=(b[i]-1);
    printf(" %i \t %i \t %i \n" ,*p,b[i],a[i]);

}
return 0;
}
于 2013-03-05T14:41:46.500 に答える