我想知道是否有人可以幫助我製作下面的C程序。代碼只是創建一個指針,然後指定一個整數數組的地址。從那裏,指針被賦予一個值,然後遞增。 輸出顯示數組名稱,數組地址和數組值。輸出按預期工作,除了數組中的最後一項增加了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個元素 –
陣列是***不是***指針。一個評估爲數組的「(子)」表達式將「衰減」爲指向該數組的第一個元素的指針(因此您的賦值工作),但這完全是另一回事。 –