当前位置: 技术问答>linux和unix
一个很简单的程序,输出结果不懂。。
来源: 互联网 发布时间:2017-03-02
本文导语: /* ret_ptr.h */ #ifndef RET_PTR_H #define RET_PTR_H extern char *get_a_day(int idx); #endif ------------------------------------------------------------- /* ret_ptr.c */ #include #include "ret_ptr.h" static const char *msg[] = {"Sunday", "Monday", "Tuesday", "W...
/* ret_ptr.h */
#ifndef RET_PTR_H
#define RET_PTR_H
extern char *get_a_day(int idx);
#endif
-------------------------------------------------------------
/* ret_ptr.c */
#include
#include "ret_ptr.h"
static const char *msg[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
char *get_a_day(int idx)
{
static char buf[20];
strcpy(buf, msg[idx]);
return buf;
}
---------------------------------------------
/* main.c */
#include
#include "ret_ptr.h"
int main(void)
{
printf("%s %sn", get_a_day(0), get_a_day(1));
return 0;
}
为什么输出的都是Sunday啊???
#ifndef RET_PTR_H
#define RET_PTR_H
extern char *get_a_day(int idx);
#endif
-------------------------------------------------------------
/* ret_ptr.c */
#include
#include "ret_ptr.h"
static const char *msg[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"};
char *get_a_day(int idx)
{
static char buf[20];
strcpy(buf, msg[idx]);
return buf;
}
---------------------------------------------
/* main.c */
#include
#include "ret_ptr.h"
int main(void)
{
printf("%s %sn", get_a_day(0), get_a_day(1));
return 0;
}
为什么输出的都是Sunday啊???
|
main里面的printf函数会先对两次函数调用进行求解然后再调用printf。一般是按照从右向左的顺序求解,这样两次函数运行完就剩下sunday的值了,然后printf通过指向static成员的指针取到sunday
|
因为两次函数调用都执行完之后才执行printf,然后两次函数调用返回的是同一个static buffer的地址,所以。
|
哥们儿 你的函数写的有问题,static char buf[20]; buf是静态变量
当然每次调用结果都是一样的
当然每次调用结果都是一样的