c++基础之变量和基本类型(1)

来源:互联网 发布:西安搜索引擎优化排名 编辑:程序博客网 时间:2024/06/05 14:43

1.类型转换部分:

对于类型转换,这里值得关注符号类型的范围问题。
unsigned char c1 = -1;//假设char占8比特为,c的值为255signed char c2 = 256;//假设char占8比特为,c的值为未定义
c1为unsinged类型的数据,而给了c1一个负数,所给的值超出了符号范围,因此结果是初始值对无符号类型表示数值去模后的余数。c2为大小为8比特的signed类型数值,当给了一个超出他范围的值时,结果是未定义的。

2.字面值常量部分:

字符和字符串问题。

"A"//为一个字符的数组,表示存放了两个字符:A,'\0'

P38页:
3.变量部分:

变量的初始化不是赋值。c++11标准,用花括号初始化变量得到全面应用。若使用列表初始化且初始值存在缺失信息的风险,则编译器将报错
long double ld = 3.1415926536;int a{ld}, b = {ld};//错误,存在缺失信息的风险int c(ld), d = ld;//正确,但缺失精度

变量的声明和定义:

为了支持分离式编译,c++语言将声明的定义区分开来。如果想声明一个变量而非定义它,就在变量名字前添加关键字extern,而且不要显式地初始化变量:
extern int i ;//声明i而非定义iint j;//声明并定义jextern double pi = 3.1416//定义
在**函数体内部**,如果试图初始化一个extern关键字标记的变量,将引发错误。变量能且只能被定义一次,但是可以多次声明。

4.符合类型:

引用:

c++11新增了“右值引用”,这种引用主要用于内置类。我们使用术语“引用”,值得是“左值引用”。
int ival = 1024;int &refVal = ival;//refVal指向ival(是ival的另一个名字)int &refVal2;//报错,引用必须被初始化
引用即别名。引用本身并非对象,没有引用的引用。

指针:

1.指针本身是一个对象2.指针无须在定义时赋予初值引用不是对象,没有实际地址,所以不能定义指向引用的指针。
int ival = 42;int *p = &ival;//p指向ival cout<<*p<<enld; //由符号*得到指针p指向的对象,输出结果
解引用操作只能适用那些的确指向某个对象的有效指针。空指针:不指向任何对象。
int *p1 = nullptr;int *p2 = 0;int *p3 = NULL//需要include cstdlib
nullptr:是一种特殊类型的字面值,它可以被转换成任意其他的指针类型。现在的c++程序最好使用nullptr,同时尽量避免使用NULL。把int变量直接赋给指针是错误的操作。
int zero = 0;pi = zero;//错误,不能把int变量直接赋给指针
void* 指针:是一种特殊的指针类型,可以用于存放任何类型对象的地址。指向指针的指针:
int ival = 1024;int *pi = &ival;//pi指向一个int型的数int **ppi = &pi;//ppi指向一个int型的指针
指向指针的引用:指针是对象,所以存在对指针的引用:
int i = 42;int *p;int *&r = p;//r是一个对指针p的引用r = &i;//r引用了一个指针,因此给r赋值&i就是令p指向i*r=0;//解引用r得到i,也就是p指向的对象,将i的值改为0

这是本人经过学习c++ primer 后的学习笔记,若有错误的地方望大神指正。

0 0