函数返回值是指针小例

/* 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 %s\n", get_a_day(0), get_a_day(1));
     return 0;
}

这个程序的运行结果是Sunday Monday吗?

不是的,因为buf是函数中的static,每次进入这个函数都是同一个buf,而函数的参数是从右往左计算然后再压栈的,所以结果是Sunday  Sunday

你可能感兴趣的:(函数返回值是指针小例)