【发布时间】:2015-02-04 23:26:45
【问题描述】:
我有两个文件,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 使用按值传递。
number内的change_number与 main 中的local_number是不同的变量。 -
这一行:number = &global_number;应该是:*number = &global_number I.E. number 是指向 local_number 的指针。代码需要设置数字指针指向的值
-
是的,它是重复的,但是指针和取消引用掩盖了它
-
@user3629249,不,它会分配一个指向整数的指针
标签: c function pointers pass-by-value