c - C 中的函数参数更改

标签 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 的值,列表将保持未排序状态。

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

最佳答案

您正在越界访问数组:

int *p = &temp[5];

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

int *p = &temp[0];

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

sorting(temp, 5);

关于c - C 中的函数参数更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400681/

相关文章:

c - 在c中重定向到多个tty

c - for 语句中的错误预期为 ';'

c - 在C中的字符串前后添加一些字母

c++ - 调试 Win32 API 应用程序是否存在内存泄漏

c - 线程中的时间间隔

c - 找到给定输入和目标字符串所需的最少转换次数

c - 使程序直接运行,而无需使用终端来运行它

c - C中.h和.c文件之间的关系

android - 从 native c 代码执行 Android 应用程序

c - 通过将矩阵的指针传递给函数来输出矩阵的值