这个问题很容易让人感到费解,同样的数值,而仅是类型不同,的确会得到不同的结果。算术运算是通过栈结构来实现的,操作数和运算符分别存放在操作数栈和运算符栈中,根据运算符的优先级进行进栈、压栈操作。假设x初值都为1,运算符‘++’的优先级高于‘*’,很容易理解对于浮点数是2.0*3.0得到6.000000。而对于整型数,两个操作数都为3,得到结果是9。由此分析,对于整型数‘++’操作的是同一个内存地址,而对于浮点型数则是直接把运算结果赋值给栈空间。以下是程序。
//testplus.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char **argv)
{
int x_i=1,y_i;
float x_f=1.0,y_f;
if(memcmp("int",argv[1],strlen("int"))==0)
{
y_i=++x_i*++x_i;
printf("int plus result is %d\n",y_i);
}
else if(memcmp("float",argv[1],strlen("float"))==0)
{
y_f=++x_f*++x_f;
printf("float plus result is %f\n",y_f);
}
else{
printf("unexpected data type,get nothing!\n");
}
return 0;
}
在Linux环境中的运行结果见图