我正在嘗試輸入一個陣列,然后使用 for 回圈以相反的順序列印它。首先,我嘗試按原始順序列印出陣列元素,如下所示:
#include <stdio.h>
int main()
{
int a[100];
int n,i;
int *p=a;
printf("Enter size of array:");
scanf("%d",&n);
printf("Enter array elements:");
for(i=0;i<n;i ){
printf("Enter array element [%d]:",i);
scanf("%d",p i);
}
printf("Array elements in reverse order: ");
for (i=0;i<n;i ){
printf("%d\n",*(p i));
}
上面的代碼作業并實作了所需的輸出。然后我嘗試在最后一個 for 回圈中使用以下更改以相反的順序輸出陣列元素:
for (i=n;i>0;i--){
printf("%d\n",*(p i));
但是這樣做的輸出如下所示:

而所需的輸出是:
3
2
1
我錯過了什么?
uj5u.com熱心網友回復:
在您的第一次嘗試中,索引范圍從 0 到 n-1 是正確的。在您的第二次嘗試中,索引范圍從 n 到 1,因此您在陣列末尾讀取和寫入一個元素。
正確的初始化和條件是:
for (i=n-1;i>=0;i--){
uj5u.com熱心網友回復:
您從 p 3 (array[3]) 迭代,而最大索引為 2 -> 未定義的行為,垃圾列印
您迭代直到 p 0,排除,您排除陣列 [0]。
for (i = n - 1; i >= 0; i--) {
//...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530131.html
標籤:C指针
上一篇:為什么Obj.*A超出范圍?
