在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的值;括号内的逗号不是参数间分隔符,而是逗号运算符。
今天看了一个博客,并且对于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的值;括号内的逗号不是参数间分隔符,而是逗号运算符。
相关文章推荐
- C++变量初始化与基本数据类型
- 第01章 CORE C++_C++ 基本结构_注释_输出语句_输入语句_初始化_条件控制_ASCII码值_转义字符_常量_变量_类型长度_运算符
- C++中string类型的初始化与赋值
- 第二章 变量和基本类型——2.1 基本内置类型((转)附录之C++中整型的超范围赋值问题)
- C++中基本数据类型的较特别形式的初始化
- c++ Premier 学习笔记(unit2 变量和基本类型-对象与初始化
- c++特性基本类型的显式初始化
- C++基本概念——类型别名
- Dev-C++下基本数据类型学习小结
- C++中基本数据类型字节数及取值范围
- C++ 怎么在默认构造函数的初始化列表中初始化指针或者引用类型数据成员
- C++:析构函数、对象生命周期、类型转换构造、拷贝构造、拷贝赋值、深浅拷贝
- C++基础 - 内置类型和类类类型的初始化
- C/C++基本数据类型所占字节数
- 从Android/Java基础之上学习C/C++语言(1)--C语言基础--基本数据类型
- C++Primer笔记(一):C++基本数据类型及其取值范围
- C++基本数据类型字面值
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- C++字符数组(定义和初始化、赋值和引用)
- java基本类型初始化