在c/c++中的基本类型赋值和初始化

在c/c++中的基本类型赋值和初始化

今天看了一个博客,并且对于c/c++的基础知识做了一个小小的总结,希望可以和大家一起探讨学习。
看如下实例:(来源:http://blog.csdn.net/haoel/article/details/4231029)
下面的程序看起来是正常的,使用了一个逗号表达式来做初始化。可惜这段程序是有问题的。你知道为什么呢?
#include <stdio.h> int main() { int a = 1,2; printf("a : %d/n",a); return 0; }
参考答案:这个程序会得到编译出错(语法出错),逗号表达式是没错,可是在初始化和变量声明时,逗号并不是逗号表达式的意义。这点要区分,要修改上面这个程序,你需要加上括号: int a = (1,2);


想想int a = 1,2;中的逗号代表什么意思?为什么在初始化的时候写成int a = (1,2)就可以了呢?
在编译的时候报的错误是:expected unqualified-id before numeric constant
其实这个int a = 1,2; <=> int a =1; int 2;这个逗号只是分隔符,而不是表达式。
如果写成int a = (1,2);这个a的值就是这个逗号表达式(1,2)的值。
那我们就对这个问题列如下几种情况。
①#include <stdio.h> int main() { int a; a = 1,2; printf("a : %d/n",a); return 0; }     //这个a会输出什么?
②#include <stdio.h> int main() { int a; a = (1,2); printf("a : %d/n",a); return 0; }     //这个a会输出什么?
通过你的编译运行很容易得到结果分别是:1,2。
而此时①中编译并没有报错,并且得到一个输出。这是因为在实例中做的是初始化操作,并且逗号是作为分隔符,而在①中做的赋值操作(关于赋值和初始化后面区分),只是将逗号左边的值赋给a(因为逗号的优先级没有等号的优先级高,如果是int a = 2*2;的话就输出4,因为*比=的优先级高),这里的逗号表示逗号运算符。

下面区分几种概念:
赋值:是在已经存在的两个对象间进行;是在变量创建后填充。
初始化:需要创建一个新的对象,并且初值来源于另一个已经存在的对象;是在变量创建时填充。
逗号运算符和逗号表达式:(a,b,c,d....x)是一个逗号表达式,他的值等于最后一个x的值;括号内的逗号不是参数间分隔符,而是逗号运算符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值