问题一:C语言如何理解x=a+=b+c
赋值运算符是自由至左的,其中“=”与“+=”的优先级相同。
那么展开的x=a=a+(b+c)。
问题二:x=x+1,x+=1,x++,哪个效率最高
第一个表达式,先读取右边x的地址,计算x+1的值,然后读取左边x的地址,最后将右边的值等号左边的值。
第二个表达式,先读取右边的x的地址,再计算x+1的值,因为x的地址已在前面读出,故省去传值的过程。
第三个表达式:先读取x的地址,然后x自增1.
因此x++的效率最高。
问题三:三目运算符的结果的数据类型
int x=10,y=2,a;
a=sizeof(x>y?x:y+0.1);
printf("%d\n",a);
最后输出结果为8,即三目运算符的结果类型与冒号后面的表达式类型相同。
问题四:静态变量与自动变量的区别
(1)静态存储类型的局部变量是在静态存储区内分配内存单元,在程序的整个运行期间内部不释放空间。而自动类型的局部变量属于动态存储类型,是在动态存储区内分配存储单元,函数调用结束后存储单元即被释放。
(2)静态局部变量是在编译时赋予初始值,并且只赋一次初值,在以后每次调用函数时,都不再重新赋值,只是使用上一次函数被调用结束时变量的值。而自动局部变量的初值不是在编译时赋予的,而是在函数调用时赋予的,每调用一次,函数都对变量重新赋一次初值。
(3)如果定义的静态局部变量没有对其进行赋值时,该默认值为0.或者为空字符串。而对于自动局部变量来讲,默认值为一个不确定的值。这是因为在函数被调用时,会为该变量分配一个存储空间,函数结束时,存储空间会被释放。在下次调用函数时,又重新分配一个储存空间,这两次分配的空间是不一样的,存储空间的值就不确定。
问题四:在进行多种数据类型混合运算时,赋值“=”右边按数据的长度增加的方向进行转换,赋值时,右边量的类型向左边量的类型转换。
问题五:当表达式中 存在有符号类型和无符号类型进行赋值运算时,所有的操作数会自动转换为无符号类型数据,这样负数将转换为一个很大的正数。
unsigned int a=6;
int b=-20;
(a+b>6)?put(">6"):put("<=6");
因为数据是以补码的形式存储的,所以-20转换成无符号类型后,会变成一个很大的正数,算出结果>0。
问题六:先给出两行代码,想想结果是什么?
int a=1,b=2;
int c= a,b;
int c=(a,b);
//求c的结果
结果为1,2;
这是很考验基础的问题,因为逗号运算符的优先级是最低的,所以第一个表达式a赋值给了c,
c==1,只不过这个逗号表达式的结果为b(逗号表达式最右边的表达式的值);
而第二个表达式因为有括号,所以是将整个逗号表达式的值赋给c。