gpt4 book ai didi

c - 为什么这不会改变数组中的值?

转载 作者:行者123 更新时间:2023-11-30 20:36:38 25 4
gpt4 key购买 nike

我知道在 C 中,事物是按值传递的,但是我认为如果在函数中修改数组(不进行复制),原始数组就会被修改,但是当我运行这段代码时,这种情况不会发生。我假设 range 不会因为范围而改变 len ?

谁能解释一下吗?

static void task(int *b, int range){
b[range-1] = 200;
range = 0;
b = NULL;
}

int main (){
int a[]= {2,4,6};
int len = 3, i;
printf("len1: %d\n", len);

task(a,len);
printf("len %d\n", len);
for(i=0; i < len; i++){
printf("%d\n", a[i]);
}

return 0;
}

最佳答案

使用指针时,您可以修改指针所指向的内容,但不能修改指针本身。因此,您的函数将修改 a,有效地将 200 放在最后一个位置,但是,它不会变成 NULL。Len 也不会被修改。要修改它们,您应该这样做

void task(int **b, int *range) {
*(b)[*range - 1] = 200;
*range = 0;
*b = NULL;
}

并将其称为

task(&b, &len);

但是如果稍后将其设置为 NULL,为什么要修改该数组呢?

关于c - 为什么这不会改变数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459005/

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