gpt4 book ai didi

c - 如何理解函数中的指针

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

我有两个文件,main.cmain2.c。我的经验告诉我,他们应该做完全相同的事情,但他们没有。

main.cmain 例程之外声明了一个全局变量。然后,在 main 例程中,声明并定义了一个指向该全局变量的指针。全局变量被改变,局部变量的值被打印到屏幕上。

main2.c 做同样的事情,但将局部到全局的定义和全局变量值的更改转换为另一个函数,change_number

我不明白为什么这种方法会失败。 main.cmain2.c 是经过几个小时的错误修复、文档和教程阅读以及显然是在此处阅读 SO 的归结结果。

我对指针的理解是初步的:它指向一个内存位置。在常规变量的情况下,指针将指向该变量的内存位置。多个指针可以指向同一个内存位置,但一个指针不能指向多个位置。

C 中没有按引用传递这样的东西,但据我所知,这不是按引用传递,因为所有变量和指针都是在函数外部定义的。请赐教。

//File: main.c
#include <stdio.h>
#include <stdlib.h>

int global_number;

int main() {
int *local_number;
local_number = &global_number;
global_number = 9;
printf("local_number = %d\n", *local_number);

return 0;
}

输出:“local_number = 9”。这是预期的结果。

//File: main2.c
#include <stdio.h>
#include <stdlib.h>

int global_number;

void change_number(int *number) {
number = &global_number;
global_number = 9;
}

int main() {
int *local_number;
change_number(local_number);
printf("local_number = %d\n", *local_number);

return 0;
}

输出:“段错误”。这显然不是故意的。代码在 printf() 之前运行良好。

最佳答案

您永远不会在第二个程序中初始化 local_number。它不指向任何地方,访问时会崩溃。尝试

int *local_number = &global_number;

那么这个值应该改变

要让 change_number 也初始化 local_number,传递 local_number 的地址并更改指向的指针:

void change_number( int **number ) {
*number = &global_number;
global_number = 9;
}

...
int *local_number;
change_number(&local_number);

关于c - 如何理解函数中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338823/

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