我有两个文件,main.c
和main2.c
。我的经验告诉我他们应该完全一样,但他们不应该。如何理解函数中的指针
main.c
在main
例程之外声明了一个全局变量。然后,在main
例程中,声明一个指针并将其定义为指向该全局变量。全局变量被改变,并且局部变量的值被打印到屏幕上。
main2.c
也是这样,但将局部到全局的定义和全局变量值的变化卷积到另一个函数change_number
。
我不明白为什么这种方法失败。 main.c
和main2.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()。
C使用通逐值。 'change_number'中的'number'是与main中的'local_number'不同的变量。 – 2014-12-07 02:16:18
[变量在函数中未被调用方看到的可能的重复?](http://stackoverflow.com/questions/27320240/variable-changed-in-function-not-seen-by-caller) – 2014-12-07 02:17:37
这一行:number = &global_number;应该是:* number =&global_number I.E. number是一个指向local_number的指针。代码需要设置数值指针所指向的值 – user3629249 2014-12-07 02:39:45