printf函数对输出表中各量求值的顺序是自右至左进行的(也即程序执行的过程中参数的压栈顺序是从右至左的,并且压栈时压入的是值,因为参数的压栈是在程序的执行过程中,所以即使参数列表中有函数调用则在压栈时也即计算出来(即调用此函数去执行),把得到的值压入栈中。
如:
static const char * msg[]={"sunday","monday" };
char * get_a_day(int idx)
{
static char buf[20];
// cout<<(int *)&buf<<endl; //验证static的静态性
strcpy(buf,msg[idx]);
// cout<<buf<<endl;
return buf; //返回指针
}
void main(void)
{
cout<<get_a_day(0)<<endl;
cout<<"--------"<<endl;
cout<<get_a_day(1)<<endl;
cout<<"---------------"<<endl;
printf("%s %s\n",get_a_day(0),get_a_day(1)); //先计算get_a_day(1),得到buf指向"monday" ,然后计算get_a_day(0),得到buf指向'sunday" ,两个参数列表都是buf指 针, 最 后 都指向“sunday”
cout<<"-----"<<endl;
printf("%s",get_a_day(0));
cout<<endl;
printf("%s\n",get_a_day(1));
int i=2;
printf("%d %d\n",++i,++i);
cout<<i<<endl;
}
运行结果为: