【无标题】C语言必须知道的3个问题

问题一: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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值