私が作っている次のCプログラムで誰かが私を助けることができるのだろうかと思います。コードは単純にポインタを作成し、次に整数配列のアドレスが割り当てられます。そこから、ポインタに値が与えられ、その後インクリメントされます。 出力には、アレイ名、配列アドレス、配列値が表示されます。出力は期待通りに機能しますが、配列内の最後の項目が1つではなく5ずつ増加します。Cポインターインクリメント偽値付きプログラム
コードを以下に示す:
#include <stdio.h>
main()
{
int numar[4]; //integer array
int x; //value for loop
int *p; //pointer
p=numar; //'point' p to address of numar array (no & necessary as arrays are pointers)
for(x=0;x<5;x++) //loop 0-4
{
*p=x; //assign the value of the first item in array to x
p++; //increment pointer for next iteration
}
for(x=0;x<5;x++) //loop 0-4
{
//display output of array name, array location and array value
printf("array[%d] is at address %p with value %d\n", x,&numar[x],numar[x]);
}
return 0;
}
上記のコードの出力を以下に示す:あなたが見ることができるように
array[0] is at address 0061FF18 with value 0
array[1] is at address 0061FF1C with value 1
array[2] is at address 0061FF20 with value 2
array[3] is at address 0061FF24 with value 3
array[4] is at address 0061FF28 with value 8
、アレイに対する所望の値[4]が4であるべきです代わりに8です。
ご協力いただければ幸いです。
多くのおかげで、
'int numar [4]; 'しかし、あなたはインデックス4にアクセスしているようです(最大有効値は3です)。したがって、配列の最後から実行され、未定義の動作が呼び出されます。ここでは鼻悪魔が来る.... – John3136
'[4]'は配列に4つの要素があることを意味します。 –
配列は***ポインタではありません***。配列に評価される(サブ)式は、その配列の最初の要素へのポインタに "崩壊"します(したがって、割り当てが機能します)が、それはまったく異なるものです。 –