我已经尝试寻找答案/查看C库以获取指针,但不确定正确的解决方案。我的问题涉及改变函数的参数。我一直在阅读指针/函数,根据我的理解,如果函数接受(int x1),那么当函数用x1完成时,函数外部的x1保持不变。但是,如果传入int * x1,则会更改。
我一直在尝试使用它,并且我尝试使用这种方法...
void sorting(int *arr, int size) {
int *i, *j, temp;
int *len = arr + size - 1;
for(i = arr; i < len; i++) {
for(j = i + 1; j <= len; j++) {
if(*j < *i) {
temp = *i;
*i = *j;
*j = temp;
}
}
}
int k;
for(k = 0; k < size; k++) {
printf("k: %d, arr[k]: %d \n", k, *(arr + k));
}
}
这将打印出一个完全排序的列表。但是,在我的主要功能中,如果我打电话给这个......
int main() {
int temp[5] = {0, 2, 1, 3, 1};
int *p = &temp[5];
sorting(pa, 5);
print the values of pa...
}
如果打印出pa的值,则列表仍然未排序。
如果此问题已经解决,有人可以链接问题,我会删除帖子。
答案 0 :(得分:2)
你在这里访问数组越界:
int *p = &temp[5];
有效索引为[0, 5)
。大概你想要一个指向第一个元素的指针:
int *p = &temp[0];
但请注意,您可以将数组传递给需要指针的函数。在这种情况下,数组衰减指向第一个元素的指针:
sorting(temp, 5);