我写了一个函数,它的指针索引,并检查是否它位于阵列的范围内,该功能打印出数组,如果它是真实的元素的其余部分,并且如果不是的话,它打印“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