2021-11-04

C++基础学习01

Part1:

1.C++中整型有几种?

答:Char \short\ int\ long \long long,每种都有有符号和无符号两种

2.有符号整型和无符号整型有什么区别?

答:以char为例,取值范围分别为:0-255  -128-127

3.char是字符还是数字?

表示和存储的关系,以整数的形式存储,以字符的形式表示,存储时,对照ACSII码表找字符对应的数字存储,显示时找到数字对应的字符并显示

Part2:

1.浮点数类型有几种?

3种:float \double\ long double

1.如何比较两个浮点数的大小?

答:不能直接判断,判断精度范围,两数之差的绝对值是否小于某给定精度

2.浮点数常量默认是什么类型?

答:double,若要定义为float,写为  0.2f

3.科学计数法:2.45e8是多少?

2.45*10^8

4.C++中取模的两个操作数可以是小数吗?

答:一定不能,只能是整数,否则编译报错

5.可以将短类型赋给长类型吗?可以将长类型赋给短类型吗?

前者可以,float=int

后者不行,如int=float, 还有风险,编译不会报错,但是会导致赋值后两者不相等。

6.C++种类型转换用什么符号?

花括号{},且只能从短类型赋给长类型。Long={int}

7.长类型加const后赋值给短类型会有什么情况?

如果长类型的值在短类型范围内,允许。因为常量的值不会再改变

否则,禁止

8.表达式中类型转换的规则是什么?

大多变量(bool char unsigned char short等)转换为Int,整型提升

其他情况,小范围转换为大范围,如Int转换为float

其实两者可归结为一类

9.强制类型转换在C和C++种的写法?

(long) a

Long (a)

字符串:

1.C++的两种字符串类型?有什么异同?

Char *

String

string的好处:string类可以让程序自动处理字符串大小,不用担心读入的字符串超界。

求长度的方法:  (char *)-- strlen()   (string)--str.size()   ,string可用长度函数直接求

IO读入的差别:

Char st[100];

Cin.getline(st,100);

String str;

Getline(cin,str);  //不用指定长度,会自动设置长度

2.string的初始化?

String str1={"hello world"};

3.C++ string类型新特性?

原始字符串,即不需要转义字符,可以直接原样输出,格式如下:

R"(I want a "cat")"

结构体:
1.C++中提倡使用内部结构体还是外部结构体?

外部结构体

2.两种结构体初始化方式?

第一种,同C语言;第二种,省略等号,写成列表形式

Student xiaoming {"xiaoming",1,3.5}

3.枚举赋值的两种方式?及具体含义

隐式赋值:enum color {red,white,bule,green};   //默认为0,1,2,3

显式赋值:enum color {red=2,white=5,bule,green};

4.枚举类型怎么用?

Color a=red;   //不要乱赋值为没有定义的值

枚举:声明,使用方法,使用时注意点)

指针:

1.引用和解除引用的符号是?

&   *

2.指针输出的是地址,那可否将地址直接赋给指针呢?

不行,因为类型不一致

Int * p;

P=0x12345678;  //错

C++中必要要进行类型转换

P=(int *)0x12345678, //但该地址的情况其实我们自己也不清楚,所以最好不要这么干!!!

2.C语言动态分配内存的方式,C++动态分配内存的方式?

C  malloc

C++   new(根据类型动态分配内存,然后保存返回地址)

Int *ptr=new int;

3.new和delete使用的坑?

1.配套使用,防止内存泄漏(有new就要有delete,delete的操作对象一定要是new产生的)

2.已经delete过的指针不能再delete,会产生空指针错误

3.C++没有内存回收机制,给程序员带来了一定灵活性,但在复杂系统中容易引发严重的问题。

4.new [] 与delete[]  配套使用

Int * ptr = new int [10]

Delete [] ptr

4.用new创建数组和C语言的方式创建数组的区别?

New创建的数组是动态数组,char arr[10]是静态的(给内存分配资源的方式:静态联编、动态联编)

区别在于前者是栈空间,后者是堆空间,后者可以用程序控制是否创建,什么情况下创建以及数组的长度,这是动态数组,动态创建的方式创建的内存在堆空间,也更加灵活

5.C++的new关键字可用于创建什么?

指针,数组,结构体,类对象

创建数组时,指明数组的类型和长度;delete时,也要指明类型

Int * ptr = new [10] int

Delete [10] int

创建结构体后,访问成员变量用->  ,C语言访问用.,

内存分配

1.描述C++内存分配的三种方式?

自动存储:函数内部的局部变量,又叫自动变量,在栈上(系统自动分配,自动释放)

静态存储:两种声明方式(全局变量,或函数内的static)前者作用域较大,不好在函数内部控制,后者只会初始化一次,按需求使用

动态存储:用new和delete关键字,会另外维持一个内存池(上,又叫自由存储空间),作用域:可以在一个函数中分配内存,在另一个函数内释放,其生命周期更灵活,不受函数的限制,但是相比于自动回收机制,可能会导致内存分片时不连续,重新分配内存时更困难。

线程存储:

表达式:

1.前缀表达式和后缀表达式在执行效率上有什么区别?

x++:后缀表达式,会先生成一个拷贝,再把拷贝值赋给原值

++x:直接在原值上修改

因此++x效率更高,但两者仅有细微的差别

2.前后缀表达式和解引用的优先级

前缀与解引用优先级一样,从右到左结合  如:*++p,先自增,再解引用

++*p  先解引用,再自增

后缀表达式比解引用优先级高,*p++,先自增再解引用

3.while与do while 的差别

while是入口条件,do while是出口条件

因此do while可以确保程序至少执行一次,while和for必须判断满足条件才会执行

4.C++的for循环增加了那些新特性?

可以基于范围进行循环,类似python

Double price[5]={1,2,3,4,5}

For(double x: price){

Cout<<x<<end;

}//x只是一个拷贝值,如果在循环体内修改x,对原数组没有影响。

Double price[5]={1,2,3,4,5}

For(double & x: price){

Cout<<x<<end;

}//如果把x设为引用,那修改x就相当于修改了原数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值