c指针在函数调用过程中的问题
2015-12-01 09:34
766 查看
</pre><p></p><pre name="code" class="cpp">#include <stdio.h> #include <stdlib.h> int *c; void f(int *b) { int a = 10; b = &a; } int main() { int tmp; f(&tmp); printf("%d\n",tmp); return 0; }
上面这段代码打印的结果是:2130567168
分析一下就可以知道,变量tmp的地址传递到函数f()中,指针b的值就是tmp的地址,后面b的值变成了a的地址,所以函数f()调用结束后,tmp地址存的值并没有发生
变化。局部变量未初始化,打印的值随机。
稍微改一下:
#include <stdio.h> #include <stdlib.h> int *c; void f(int *b) { int a = 10; b = &a; } int main() { int *tmp; f(tmp); printf("%d\n",*tmp); return 0; }
这样输入的结果是:0
这个函数分析一下就是,指针tmp传入函数f中的b变量,相当于b=tmp,随后b=&a,这一过程tmp指针的内容并没有发生改变,所以打印出来指针指向的地址值是随机的
再修改一下程序:
#include <stdio.h> #include <stdlib.h> int *c; void f() { int a = 10; c = &a; } int main() { int *tmp; f(); printf("%d\n",*c); return 0; }
这样得到的结果是:10
这一过程指针c的值是a的地址,所以打印c指向的数值就是a的值
-------------------------------------------分割线--------------------------------------------------------------------------------
所以要想获得a的值,要么传递指针后,指针指向的地址存入a的值(而不是a的地址)
要么就是获得a的地址,通过return或者全局变量
相关文章推荐
- 关于指针的一些事情
- Linux C函数参考手册(PDF版)
- Lua教程(十七):C API简介
- C#实现打造气泡屏幕保护效果
- 使用C#代码获取存储过程返回值
- C# Pointer指针应用实例简述
- C/C++数据对齐详细解析
- 利用C语言来求最大连续子序列乘积的方法
- 字符串的组合算法问题的C语言实现攻略
- C++智能指针实例详解
- C 语言基础教程(我的C之旅开始了)[三]
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- 最大子矩阵问题实例解析
- C字符串操作函数实现方法小结
- C语言中static的作用及C语言中使用静态函数有何好处
- 字典树的基本知识及使用C语言的相关实现
- 详解C语言中free()函数与getpagesize()函数的使用
- C++指向函数的指针实例解析