C++Primer Plus 200个小知识点

小记:

1,看的为[美]史蒂芬·普拉达所写的第六版,中文版

2,小知识点只是一些辅助记忆的小点

3,现在距离接触C有两年+,很多概念仅限于了解程度譬如指针、引用、类继承、函数重构(多态)、友元等,通过本次阅读,期望达到基本理解程度。

正文:

3,在页面打印输出,C中的printf()、scanf()需要添加头文件<studio.h>,而C++中的输出cin、cout则需要添加头文件iostream

4、程序运行,C++程序必须包含一个名为main()的函数(其中独立程序、一些动态链接库、独特环境如嵌入式等不需要)。

5、注释方式,单行注释//  多行注释/*.....*/,对比matlab注释用% python注释用#

6、用户定义的函数包含三部分:函数原型、函数定义、函数引用,通常而言,原型放在.h文件中,而函数定义放在相关某个函数中,一般不把定义放在.h函数中,原因是若多个文件调用.h,会引起冲突而发成错误。

7、查看变量的字节用sizeof,查看数组长度sizeof(array)/sizeof(array-type),matlab用size查看矩阵维度。

8、#include<climits>定义了符号常量的最大值和最小值

CHAR_BIT    //字节的位数 
MB_LEN_MAX  //多字节字符的最大字节数 
CHAR_MIN    //char 的最小值 (宏常量)
CHAR_MAX    //char 的最大值 (宏常量)
SCHAR_MIN
SHRT_MIN
INT_MIN
LONG_MIN
LLONG_MIN 
//(C++11)分别为 signed char、short、int、long 及 long long 的最小值 (宏常量)
SCHAR_MAX
SHRT_MAX
INT_MAX
LONG_MAX
LLONG_MAX 
//(C++11) 分别为 signed char、short、int、long 及 long long 的最大值 (宏常量)
UCHAR_MAX
USHRT_MAX
UINT_MAX
ULONG_MAX
ULLONG_MAX 
//(C++11) 分别为 unsigned char、unsigned short、unsigned int、unsigned long 及 unsigned long //long 的最大值 (宏常量)

9、一些C++变量初始化方式为

int num={11};//把11赋值给num
int num{11};
int num={};//初始值为0
int num{};//同上

10、若想输出结果为16进制,只需要在需要输出的结果前面加上

cout<<hex;//16进制输出
cout<<dec;//十进制输出
cout<<oct;//8进制输出

11、C++中输出cout<<将字符变量显示为字符,将常量ch='M'显示为数字,若想输出字符,则需要cout.put(ch)替代。[release2.0之后能够正常显示,属于历史遗留问题]

12、单引号的应用,对字符使用单引号,对字符串使用双引号(以数组形式显示),单双引号在matlab和python中能够互相替换。

13、常见的一些转义编码\t \n \r \v \b \a \' \\ \?

14、wchar_t、char16_t、char32_t,后面两个无符号,分别为长16位,长32位

15、浮点数表示法,A.BCeX  例如3.23e10,4.32-e5,其中e和E等价;float、int都是四个字节,double八个字节。

16、数组的创建

type name[number] //一维数组,eg:float arr[20]
type name[number1][number2]  //二维数组,eg:double matrix[20][14]
type name[number1][number2][number3]  //三维数组,第一个是纬度,第二个是行,第三个是列
double tri[2][3][2]={1,2,3,4,5,6,7,8,9,10,11,12};

17、字符串赋值数组的两种做法(单双引号问题)

char str[]={'s','s','a'};//可以空,默认3
char str[3]="ssa";

sizeof(A)返回的是数组长度,strlen(A)返回的是字符串的长度;若要得到数组的长度,则需要sizeof(A)/sizeof(type)

18、cin、cin.get、cin.getline区别

a、cin 根据cin>>sth 中sth的变量类型读取数据,这里变量类型可以为int,float,char,char*,string等诸多类型。这一输入操作,在遇到结束符(Space、Tab、Enter)就结束,且对于结束符,并不保存到变量中。注意:最后一个enter也在缓冲区。

b、cin.get(字符数组名,接收长度,结束符)              其中结束符意味着遇到该符号结束字符串读取,默认为enter,读取的字符个数最多为(长度 - 1),因为最后一个为'\0'。要注意的是,cin.get()操作遇到结束符停止读取,但并不会将结束符从缓冲区丢弃。cin.get函数有如下几种声明
 

istream& get(char& c);
istream& get(char* s, streamsize n);
istream& get(char* s, streamsize n, char delim);
istream& get(streambuf& sb);
istream& get(streambuf& sb, char delim);

c、cin.getline(字符数组名,接收长度,结束符) 其用法与cin.get(字符数组名,接收长度,结束符)极为类似。cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面若有cin操作,会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

d、getline(cin,string&x)

19、string拼接直接+即可 char拼接需要strcat

20、c++中结构体的用法

struct stock
{
    int num[20];
    double len;
    string list_name;
}

stock stock1;然后针对stock1.num  stock1.len等进行赋值等。

21、union共用体,计算长度和struct不同

22、枚举enum flower{red,green,blue}   flower(0)代表的是red

23、使用new分配内存,可以分配的只能是针对指针类型的,例如变量、结构体、数组等,需用delete pt对应释放内存;C语言用的是malloc()函数分配内存。

24、new创建数组 int*pt=new int[num];  pt[3]=4;(初始值进行赋值)

25、数组名为第一个元素的地址,对数组名使用&运算符得到的整个数组的地址,若想得到第一个元素的地址需要&array[0]

26、句点运算符.和->运算符:若结构标识是结构体,则句点;若是指针,则采用->运算符

27、(可忽略)visual studio 2010中cin.getline用法的问题

28、数组替代品,vector(include<vector>)、array(include<array>)

vector<double>vec(n)={1,2,...,n}//建立vector向量
array<double,n>arr={1,2,...,n}//建立array向量

array的优势是可以实现数组的整体赋值

29、存储的三种方式:静态存储、自动存储、动态存储

30、三种循环方式  for(int i=0;i<n;i++){}   while(){}   do{}while()

31、cctype字符函数库,需要包含头文件#include<cctype>

isalnum()//判断c是否为字符或数字,是则返回1;否则 返回0
isalpha()
iscntrl()//检查所传的字符是否是控制字符
isdigit()//检查其参数是否为数字字符
isgraph()//测试字符是否为可打印字符
islower()
isprint()
ispunct()//检查所传的字符是否是标点符号字符
isspace()
issuper()
isxdigit()//检查是否为10进制字符
tolower()
toupper()

32、c++中唯一一个需要三个操作数的运算符x?y:z  eg:5>3?10:12

33、C++输出到文本的一个例子

#include<fstream>
ofstream Outfile;
Outfile.open("xx.txt");
Outfile<<"xxx"<<endl;
Outfile.close();

34、c++函数的三要素:原型、定义、调用

35、在c++中,当且仅当用于函数头或函数原型中,int *arr和int arr[]含义相同,都表明arr是int指针。

36、在函数头中加const保护

double showarray(const doube arr[],int n)//意味着不能在showarray修改arr[]数组的数据

37、二维数组函数头等价问题

int sum(int arr[][4],int n)
{
    int total=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<4;j++)
        {
            total+=arr[i][j];
        }
    } 
    return total;          
}
int sum(int(*arr)[4],int n)//这个函数头和上面的函数头等价

38、函数无法返回一个字符串,但可以返回一个字符串的地址

39、结构体函数的用法问题

40、gets、puts用法问题

41、函数指针,对于函数sum而言,sum()返回值,sum则代表指针

42、运算符优先级问题:数组运算符[]优先级高于*(指针运算符),()运算符等级最高

const int*(*arr[3])(const double*,int)
//int* 返回值为int*
//*arr[3]数组指针,指向数组三个值的指针
//const double* 某数组或者值的指针,不可修改内容

43、某指针和非指针函数等价问题

double (*pf)(int)
double pam(int)
pf=pam;//属于历史遗留问题

44、*也被称为解除引用运算符,对于数组arr[10]={}   arr=&arr[0]   &arr是整个数组的地址

45、内联函数inline可以不用函数原型,一般适用于小型函数

double inline new_d(int a, int b) { return a + b; }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值