C中的函数参数更改

时间:2015-02-08 23:36:33

标签: c

我已经尝试寻找答案/查看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的值,则列表仍然未排序。

如果此问题已经解决,有人可以链接问题,我会删除帖子。

1 个答案:

答案 0 :(得分:2)

你在这里访问数组越界:

int *p = &temp[5];

有效索引为[0, 5)。大概你想要一个指向第一个元素的指针:

int *p = &temp[0];

但请注意,您可以将数组传递给需要指针的函数。在这种情况下,数组衰减指向第一个元素的指针:

sorting(temp, 5);