我寫了一個函數,它的指針索引,並檢查是否它位於陣列的範圍內,該功能打印出數組,如果它是真實的元素的其餘部分,並且如果不是的話,它打印「Not in range
」 。該函數獲取的唯一參數是數組,它的長度和指針。我遇到的問題是負責迭代數組並打印數組其餘部分的循環也會在數組中的最後一個元素後面輸出垃圾數值。爲什麼程序不斷打印垃圾值?
注意:不能使用任何其他局部變量,只有參數(數組,長度,指針)。您也不能使用[]
運算符,只能使用指針運算。
這裏是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printAfterX(int* arr, int n, int* x);
int main()
{
int arr[] = { 4, 8, 6, 2, 1, 3, 5, 7, 8, 9, 5 };
printAfterX(arr, 11, arr+6);
return 0;
}
void printAfterX(int* arr, int n, int* x)
{
if (x >= arr && x <= (arr + n)) //this checks if x is in the limits
{
x++;
for (*arr = 0; *arr <= n; *arr++)
{
printf("%d ", *(arr + *x));
}
}
else
{
printf("Not in range ");
}
}
使用去開溜的長度,看看什麼樣的價值你逝去的'X '。 –
1)'(arr + n)'超過了數組,而不是它。2)'* arr'給出了一個存儲在數組中的值(如果'arr'是有效的),所以根據長度檢查它是沒有意義的......實際上整個'for'循環需要被重新考慮。 – Dmitri
'* arr <= n'檢查值'arr'是否指向小於或等於元素的數量。 '* arr ++'將'arr'指向下一個元素,然後無理由解引用。 '*(arr + * x)'得到'x'指向的數組中的值,然後將其加入到'arr'中以獲得指向元素'arr'指向的許多元素的指針,然後解引用以獲得存儲在那裏的值(這幾乎肯定是錯誤的事情)。 – Dmitri