码迷,mamicode.com
首页 > 编程语言 > 详细

C++ primer分章节快速回顾

时间:2015-04-29 00:19:14      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:

第三章:

1,sozeof(int); int n_int=INT_MAX; sizeof n_int;(对变量括号可选)
2,#include<climits>包含一些类型的最大值
3,count 默认显示十进制, cout<<dec(默认) count<<hex count<<oct
4,bool, char, short, int, long, longlong, float, double, long double
5,count.setf(ios_base::fixed,ios_base::floatfield)//防止大的数切换到E表示法,显示小数点后6位小数(保留0)
6,C++风格 typeName(value)
7,变量初始化 int wren(23); int wren=23;
8,C++ const和#define区别:
(1)const 编译阶段使用,define是在预处理阶段展开;
(2)const可以指定类型,做安全检查,而define没有
(3)const可以在限定在指定区域
(4)const用于更复杂的类型,数组,结构体(大对象要分配内存,或extern声明或对其取地址时也要分配内存)
(5)const常量定义基本类型时放在符号表中(堆或栈),而define仅仅是展开,不分配内存
9常量的类型:L,l; U,u; ul,UL;

10 类型转换 float运算不提升为double,int型整数被赋给float时截取小数

***常量折叠:#define和const,const定义常量,你不能尝试通过更改变量的值去改变它,但是可以通过引用它的地址来改变,即通过指针。常量折叠说的是,在编译阶段,对该变量进行值替换,同时,该常量记录在符号表中,和define还不一样,有三种情况下,会为const分配内存。
实例:#include<iostream>
int main()
{
using namespace std;
const int i=20;
int *p=(int *) &i;//改变i内存地址上的值
*p=10;

cout<<(int *)&i<<":"<<i<<endl;//这个i在编译阶段已经被20给替换了
cout<<p<<":"<<*p<<endl;
return 0;
}
结果显示0012FF44:20
0012FF44:10


第四章:
1,数组只能定义时初始化,int hand[500]={0},此后只能单个单个元素赋值; 不能数组间赋值
初始化数组为{1}时,只有第一个元素是1,其它置0
a=int[10];sizeof a 数组字节数10*4; sizeof a[0] int类型字节数4

2,字符串数组 char cat[5]="C+owby"或 char cat[]="....."; count<<cat打印字符串,而非地址;

3,字符串输入:cin通过空白(space,\b,\n)来定界,不能读空格;
cin.getline(name,20),遇到\r,\n停止,丢弃换行符,最多读19个char;
cin.get(name,20).get()或name=cin.get();cin.get();cin.clear()
* 用cin>> 连续读入时,注意每次读入字符或数字时,cin,get()或者(cin>>value).get()处理掉字符流中的回车生成的\n

4,读数字 cin>>year;cin.get()处理空行,防止阻断输入

5,#include<string> string类在名称空间std中 使用前必须声明useing namespace std;
和字符串数组不同,相互赋值:str1=str2; 拼接:str1+=str2;读入:getline(cin,str1)(这是个函数,不是cin的类方法)

6,对比#include<cstring>,
void strcat(char *t,char *s){ while(*t++=*s++);}字符串拼接
strcpy(char *t,char *s);

字符串长度:string类方法 len=str1.size()(不计‘\0‘), 字符串数组 len=strlen(charr1)(cstring 中的函数,不计\0)
读入方法: 字符串数组 cin.getline(name,20), string:getline(cin,str1);

7,struct 可以相互赋值, 成员分隔定义时用;赋值时用,可以整体赋值,可以结构数组

8, union, enum spectum{oen,two=0,three=8,four};spectum myflag=one;

9,指针:使用前一定要有指向地址!cha c=‘a‘,*p=&c; (int*)强制转换为两个字节的地址类型,(double*)四个字节
10,new/delete 和malloc/free比较:
new/delete是操作符,而malloc/free是库函数,都是用于申请动态内存和释放动态内存的
  对非内部数据类型的对象而言,malloc/free不能执行构造函数和析构函数,注定只能用于C
  而new/delete可以胜任
11,new/delete条例:内存耗尽返回0(null pointer)可以被释放;不是new开辟的内存就不要用delete去释放;一个地址只能  释放一次,无论多少指针指向它
12,指针和数组名:基本相同,根本区别:数组名是指向第一个元素的地址常量,不能被赋值!
  指针或数组名加1是指向下一个地址块,即下个元素
13,cout的智能化:cout<<array;array是数组名,cout自动辨别是否为字符串数组(试了下,char数组就可以,比如字符数组char array[]=[‘a‘,‘b‘,‘ ‘,‘c‘]也可以)或string或char*,若是打印数组内容;其它则打印数组首元素地址

技术分享
 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 
 5 using namespace std;
 6 int main()
 7 {
 8     string str1="hello";
 9     cout<<str1;//打印字符串内容
10     char array[]="hello word";
11 
12     cout<<endl<<array<<endl;//打印字符串数组内容
13     int mm[6]={0,1,2,3,4,5};
14     cout<<mm<<endl;//打印整型数组地址
15 
16     char c=a,nn[]={a,b,c,d,e,f};
17     cout<<"nn is:"<<nn<<endl;//打印字符型数组内容,但是由于n[4]后面的没有初始化,乱码
18     char *p1=new char[strlen(nn)+1];
19     cout<<"strlen:"<<strlen(nn)<<endl;//strlen只是针对字符串数组有用!!12是怎么来的?
20     strcpy(p1,nn);
21     cout<<p1<<endl;//同打印nn一样,后面未初始化的依然乱码
22     cout<<*p1<<endl;//首个元素内容
23     
24     char vv[20]="hello word!!!";
25     cout<<vv<<endl;
26     cout<<"strlen:"<<strlen(vv)<<endl;
27     char *p2=new char[strlen(vv)+1];//这次可以了 13
28     strcpy(p2,vv);
29     cout<<p2<<endl;//打印出hello word
30     delete [] p1;
31     delete [] p2;
32     return 0;
33 
34 }
View Code

 

  

C++ primer分章节快速回顾

标签:

原文地址:http://www.cnblogs.com/fkissx/p/4464258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!