您的位置:首页 > 编程语言 > C语言/C++

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

2012-01-12 14:48 225 查看
在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的值;括号内的逗号不是参数间分隔符,而是逗号运算符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: