第 3 章 数据类型
来源:互联网 发布:java开发eclipse版本 编辑:程序博客网 时间:2024/04/30 15:58
第 3 章 数据类型
1.内置数据类型的长度、默认类型(有符、无符)有编译器决定,不是c++标准。各编译器对整数字面值的长度限制不同,超过一定规定长度报错,未超规定长度但超出表示范围,虽合法但不合理。同样程序在不同编译器上编译出的指令不同。
2. (1)表示成无符或长整要在整数字面值后加U或L,大小写均可。如:b=012345L;c=235u;
(2)浮点数字面值默认为double型,要表示成float则需在浮点数后面加F或f。
3.取余运算的正负性取决于被除数的正负性,被除数正则余数正,被除数负则余数负:
11 %(-5)= 1; -11 %(-5)= -1;
4.ASCII码128个,其中33个(0——31,127)不可见的控制字符。转义字符可以表示不可见字符:
/t:水平制表符 /v:垂直制表符 /r:回车 /n换行 /a:响铃 /ddd:1-3位八进制数 /xhh:1-2位十六进制数
5.枚举型:
(1)枚举型enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun};默认时,第一个对应整数:0,一次类推。
枚举值虽然对应整数,但枚举变量却不能取整数值,只能通过强制类型转换:
Week week = 0; //wrong. week = Mon;week = Week(0);//right.
(2)枚举符作为整形数的一个子集,可以直接参与整数能享有的所有运算,而且可以脱离枚举变量的定义使用:
enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun}; if(a == Mon) cout << "monday./n";
(3)进入函数调用或其他模块时,常量需要初始化,而枚举无需定义其实体,可直接使用枚举符,代替常量使用。
6.布尔:默认输出形式为0/1,要输出true/false,需加控制符:cout << boolalpha<<d<<endl;
7.C-strig & string
C-串是字符串字面值,以一个全0位字节作为结束符。C-串长度为字符串长度加1。C串类型为const char*。
8.字符指针&字符数组
(1)指针表示内存空间位置,输出字符指针的间接引用(*str)就是输出单个字符,输出字符指针就是输出C串。
char * str = "hello";
cout << *str <<endl; //h
cout << str <<endl; //hello
(2)数组不能复制:
char a1[6] = "hello";
//char a2[6] = a1; //错,数组是不能复制的
(3)c串操作,默认在string.h中,标准c++中,iostream包含了它:
char * s1 = "hello";
char * s2 = "123";
char a[20];
strcpy(a,s1); //复制
cout << (strcmp(a,s1) == 0 ? " " :"not " )<< "equal." <<endl; //比较
cout << strcat(a,s2) << endl;//连接
cout << strrev(a) <<endl; //倒置
cout <<strset(a,'c') <<endl;//设置
cout << (strstr(s1,"ell") ? " " : "not ") << "found" <<endl;//查找字符串
cout << (strchr(s2,'c') ? " " : "not ") << "found" <<endl;//查找字符
9.string:
(1)string操作:
string a, s1 = "hello ";
string s2 = "123";
a = s1; //复制
cout << (a == s1 ? " " : "not ") << "equal." <<endl;
cout << a + s2 <<endl; //连接
reverse(a.begin(),a.end()); //倒置
cout << a <<endl;
cout << a.replace(0,9,9,'c') <<endl; //替换
cout << (s1.find("ell") != -1 ? " " : "not ") << "found." <<endl; //查找字符串
cout << (s1.find('c') != -1 ? " " : "not ") << "found." <<endl; //查找字符
(2)cin 将前导空格(空格、回车、水平或垂直制表符)滤掉,读入单词,遇到空格结束.
getline总是将末行的回车符滤掉.
10.数组
(1)int array[5] ={}; //error! 初始值不能为空
(2)int array[5] ={0};//若果初始个数不等于数组大小,则后面全部补零;
(3)int a[]; //error
(4)int a[] ={1,2,3}; //ok
for(int = 0; i < sizeof(a) /sizeof(a[0]);i++) //sizeof(a) 表示数组的字节数
用sizeof(a) /sizeof(a[0])而直接用数组的大小的原因: 增加了代码的通用性,当a的类型或大小变化时,此代码不变。
(5)初始化方式:
char ch1[4] ={"leo"}; //以'/0'结束
char ch2[3]={'l',''e,'o'};
char ch3[4]="leo"; //以'/0'结束
(6)全局数组和静态数组默认值为0,局部数组默认初始值不确定。
11.向量
(1)vector<int>d(b.begin(),b.begin()+3); //定义向量d,其值以此为b中的0~2(共3个)元素的值。
(2) 遍历:
for(int i = 0; i < a.size(); i++) cout << a[i];
for(vector<int>::iterator it = a.begin(); it != a.end(); it++) cout << *it;
(3) capacity:供扩展之用的未用元素个数
vector<int> vec3(10);
vector<int> vec4;
cout <<vec3.size()<<endl; // 10
cout <<vec3.capacity<<endl; // 1
cout <<vec4.size()<<endl; // 0
cout <<vec4.capacity<<endl; //1
(4)向量常用操作
vec5.assign(vec.begin(),vec.begin()+4);//赋值
vec5.assign(4,2);
int x = vec.back();//尾元素
int y = vec.front();//首元素
vec6.push_back(5);//末尾插入
vec6.pop_back();//删除末尾元素
vec6.resize(10);//调整个数,多删少补
vec6.resize(10,2);
if(!vec6.empty()) cout << "not empty!"<<endl;//判空
vec6.clear();//清空,不再有元素
if(vec6.empty()) cout << "empty!"<<endl;//判空
cout <<vec3.size()<<endl; //10
cout <<vec3.capacity<<endl;// 1
cout <<vec4.size()<<endl;// 0
cout <<vec4.capacity<<endl;// 1
if(vec1 == vec) cout<<"equal!"<<endl; //比较
for(int i = 0; i < vec1.size(); i++)//遍历
cout << vec1[i] <<" ";
cout <<endl;
for(vector<int>::iterator it = vec2.begin(); it != vec2.end(); it++)//遍历
cout << *it <<" ";
12 指针
(1)指针类型转换
类型转换的目的是要逃避编译的类型检查,以使不能完成本任务的模块能凑合着使用。
三种转换方式:a. int * p = reinterpret_cast<int>(&f); b. static_cast<type>(exp) c.const_cast<type>(exp)
(2)指针+整数 = 指针,指针-整数=指针,指针-指针=整数
(3)利用指针遍历数组
int iArray[6];
for(int i = 0; i<6; i++)
iArray[i] = i * 2;
for(int *p = iArray; p<iArray+6; p++)
cout<<p<<": "<<*p<<endl;
(4)指针常量和常量指针
指针常量与指针变量相对,也就是指针的值不能改变。常量指针是指向常量的指针。Const修饰指针则为指针常量,
修饰指向的实体类型,则为常量指针。指针常量不能修改指针值,但可以修改指向的实体;常量指针可以修改指针值,但不可以修改它所指向的实体的值。常量指针常量既不能修改指针值,也不能修改它指向的实体的值。
const int * p = &a; //常量指针
int * const cp = &b;//指针常量
int const * ip = &b;//指针常量
const int * const dp = &b; //常量指针常量
13 引用
(1)引用定义时必须初始化 int & rint = someInt;
(2)引用只能改变它所关联的实体的值,但不能改变它本身的值。
(3)int int1 = 5;const & rInt = int1; const 为了阻止rInt 做写操作,但不妨碍实体值被改变,如:int1 = 8;
(4)高级编程多用引用,低级编程多用指针。
- 第 3 章 数据类型
- 第3章 基本数据类型
- 第3章、数据类型与变量
- 第3章 数据类型和运行符
- 第3章 数据类型和运算符
- 第8章:TTCN-3数据类型
- 第8章,数据类型
- 第4章 数据类型
- 第 4 章 数据类型
- 第4章 数据类型
- 第2章 基本数据类型
- 第03章:java数据类型
- 第8章 自定义数据类型
- 犀牛书第3章 JavaScript数据类型和值(上篇)
- 犀牛书第3章 数据类型和值(中篇)
- mySQL 教程 第3章 数据类型和数据完整性
- c primer plus第3章总结:数据类型
- python入门 第3章 Python变量和数据类型
- Spring,hibernate,struts的面试笔试题(含答案)
- Learning Server-Side JavaScript with Node.js
- Bash 终端快捷操作总结
- Ubuntu下创建、重命名、删除文件及文件夹,强制清空回收站方法
- linux下创建具有root权限的帐号
- 第 3 章 数据类型
- Linux 下修改文件的时间属性
- Fedora 修复模式(maintenance) 下文件系统只读的解决办法
- ssh基础理论知识
- 快速幂的实现~~~
- Fedora 休眠无效
- HeadFirst 设计模式学习笔记21-- 解释者(Interpreter)模式拾零
- Fedora yum 插件 提高源下载速度
- JSP中的EL表达式详细介绍