gpt4 book ai didi

c - C 中的函数参数更改

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:57 25 4
gpt4 key购买 nike

我已经尝试寻找答案/查看 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com