linux c 一站式学习 函数接口 返回值是指针的情况
来源:互联网 发布:插画制作软件 编辑:程序博客网 时间:2024/05/20 09:46
关于printf的小例子
#include<stdio.h>#include<string.h> #include<stdlib.h> char *get_a_day(int idx); static const char *msg[]={"sunday","monday","tuesday"}; char *get_a_day(int idx) { static char buf[20]; for(int i=0;i<20;i++) buf[i]=0; strcpy(buf,msg[idx]); return buf; } int main() { printf("%s %s\n",get_a_day(0),get_a_day(1)); system("PAUSE"); return 0; }这段代码的输出为什么是sunday sunday啊 怎么不是sunday monday呢。。??求解
分析:
printf执行时首先计算get_a_day(1),get_a_day函数返回的是buf的地址,这时buf指向的地址内容为 monday \0 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _(共20字节),然后由于buf是静态的,第二次调用get_a_day返回的仍然是buf的地址,经过第二次strcpy后buf地址变为 sunday \0 _ _ _ _ _ _ _ _ _ _ _ _ _(共20字节),然后调用printf时,get_a_day(0),get_a_day(1)分别入栈buf地址,于是打印出你看到的结果。
注意:先有get_a_day(1),再有get_a_day(0),最后才会调用printf。从右到左执行,buf里面存的是最左边执行完的结果,所有的函数参数返回的都是buf的地址,关键是那个static的问题。
貌似要正确输出 sunday和monday只能依靠printf的执行顺序了。
比如这样:
printf("%s\n",get_a_day(0));
printf("%s\n",get_a_day(1));
只要放在一个printf中,只能输出形参最左边的那个值。
http://blog.csdn.net/keyeagle/article/details/6708077/
阅读全文
0 0
- linux c 一站式学习 函数接口 返回值是指针的情况
- 函数的返回值是函数指针的指针函数
- 函数的返回值是指针
- 函数的返回值是指针--练习
- 返回值是函数指针
- 指针作为函数返回值需要注意的情况
- 【C++】指针作为函数的返回值
- Linux C 编程中main函数返回值情况
- 巧解如何声明函数指针以及函数返回值是函数指针的函数指针
- <C语言>关于函数返回值是指针,取不到值的问题研究
- 返回值是函数指针的函数示例
- 返回值是函数指针的函数使用方法
- C返回指针的函数
- 关于函数返回值是指针的问题
- 关于函数返回值是指针的问题
- 函数返回值的情况
- 返回值为C/C++函数指针的函数
- C++:指针作函数参数的情况
- python _、__和__xx__的区别
- gulp.dest
- Qt 二维码扫描仪(SDK+串口)
- css 深入理解line-height
- 绘制for循环框图
- linux c 一站式学习 函数接口 返回值是指针的情况
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)
- Android studio 3.0 com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
- Could not publish server configuration for Apache Tomcat v6.0. Multiple Cont
- 欢迎使用CSDN-markdown编辑器
- php导出大数据csv
- orcle 赋管理员权限
- 各种常见排序算法的C++实现
- Java Security Architecture--Java安全体系技术文档翻译(七)