gpt4 book ai didi

C:从函数外部访问指针

转载 作者:太空狗 更新时间:2023-10-29 15:49:40 25 4
gpt4 key购买 nike

我有以下代码:

int takeEven(int *nums, int numelements, int *newlist) {
newlist = malloc(numelements * sizeof *newlist);
int i, found = 0;
for(i = 0; i < numelements; ++i, nums++) {
if (!(*nums % 2)) {
*(newlist++) = *nums;
found++;
}
}
newlist -= found;
printf("First number found %d\n", *newlist); // <= works correctly
return found;

}

int main()
{
int nums[] = {1,2,3,4,5};
int *evenNums;
int i;
int n = takeEven(nums, sizeof(nums) / sizeof(*nums), evenNums);
for (i = 0; i < n; ++i) {
printf("%d\n", *(evenNums++));
}
return 0;
}

以上代码的输出:

-1
2088999640
2088857728

如果我尝试在返回函数之前打印 newlist 指针的第一个元素 (printf("First number found %d\n", *newlist);) ,它按预期工作,但为什么当我尝试从函数外部访问指针时,我从看似未分配的地址中获取这些值?

最佳答案

您正在按值传递 newList 指针,因此它不会被您的函数修改。你应该这样做。

int takeEven(int *nums, int numelements, int **newlist) {
*newlist = malloc(numelements * sizeof *newlist);
...
}

...

int n = takeEven(nums, sizeof(nums) / sizeof(*nums), &evenNums);

关于C:从函数外部访问指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1747602/

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