C++学习随笔(二)

2020-03-23  本文已影响0人  宇宙巨炮

未经本人授权,禁止转载


大家好,这里是凛刃。目前暂定每个随笔会谈到10个点,希望这个数量和质量能适合大家的阅读。


1. 数组的那些坑

这个看似简单的问题却存在许多容易忽略的细节。

int array1[10];    //定义了一个容量是10的数组,但是并没有初始化
                  //此时数组里面成员的值是不确定的,具体是该数组被分配到的内存之前的残留值。
int array2[10] = {0,1,2,3,4,5,6,7,8,9};    //使用初始化列表完整的初始化了一个容量是10的数组
int array3[10] = {23,45};    //使用初始化列表初始化了前两个成员的值,剩下的8个成员自动赋值为0
int array4[10] = {0};    //这个方法可以直接把数组里的所有成员赋值为0
int array5[10] = {};    //花括号里什么都没有,效果等于上一行代码,把数组里的所有成员赋值为0
int array6[] = {123,314,123,145};    //这里[]里什么都没有,编译器自动使array6成为具有4个成员的数组

2. 烦人的字符串在C++获得了新生

1. 学过C语言的各位是不是被笨重的char字符串及其各种方法折磨的很惨,但是C++的string类让一切变得非常简单,不过我们还是要了解char字符串的那些“坑”。
char str1[5] = {'a','b','c','d','\0'};    //使用初始化列表
char str2[12] = "linren";    //初始化列表初始化字符数组有些复杂,这个方法很简便,而且会自动在末尾添加'\0'
char str3[] = "hahaha";    //这里让编译器去识别str3的大小,不过依旧不建议这样做

- 接下来巨大坑警告!!!

2. char字符串与string型

3. 字符串的输入

4. 初始化列表详解

初始化列表其实就是用{}去赋值,{}里可以对变量、数组、结构体的任意数量成员赋值,没有赋值的自动赋值为0。

int num = {123};
char chr[10] = {"a","b","c","\0"};
struct xixi
{
    int a;
    float b;
    std::string c;
};
xixi m_xixi[3] = { { 1,2,"rrr" } , { 3,4,"ttt"} , {5,6,"yyy"} };

5. 共用体union

union用的比较少,他和结构体的声明一样,可以在共用体内部定义多种类型的变量,但是同一时间只能是其中一种,可以通过再次赋值改变共用体的数据类型。
当一个变量具有多种属性但是只能存在一种,那么使用共用体可以节省内存。

6. 枚举enum

enum在C项目中使用频率极高。enum spectrum{ red, orange, blue, yellow, gray, black };
spectrum就是一个枚举,red、orange、blue、yellow、gray、black就是spectrum里的常量成员对应0~5,枚举的所有成员本质都是整型。

enum spectrum{ red, orange, blue, yellow, gray, black };
spectrum band;    //定义一个枚举量band
band = blue;    //band只能被赋值为枚举spectrum的其中一个成员
int color = gray;    //枚举量成员可以强制转换为int,但是反之不行
enum bits{one = 1,two = 2,four = 4,eight = 8};    //可以主动给枚举成员赋值,不赋值默认从0开始
enum bigstep{first,second = 100,third};    //第一个成员没有赋值,默认是0;第三个成员没有赋值,默认延续上一个成员,所以third是101
bits myflag;
myflag = bits(4);    //还可以通过这种方式给枚举量myflag赋值

7. 指针的那些坑

指针是一种存储地址的变量。
int* ptr;
ptr = (int*)0xB8000000;

但是更建议用接下来的new指令,C++的优势之一

int* parray = new int [10];
delete [] parray;
parray = parray + 1;    //将parray这个指针指向的地址向后移一位,parray[0]变成了原来的parray[1]
                        //将指针移位后不再能使用delete,必须得-1移回原来的位置才能使用delete销毁

8. 自动存储、静态存储和动态存储

9 递增运算符++和递减运算符--

++和--前置是先进行增减运算再进行诸如赋值等运算,++和--后置是先进行诸如赋值等运算再进行增减运算,只是单纯的使用这两种表达式几乎没有任何区别,注意这点就好。

int x = 5;
int y = x++;    //y = 5, x = 6
int m = 5;
int n = ++m;    //n = 6, m = 6

10. 逗号运算符

这是一个不常使用但是很有用的方法,在for循环内可以使用逗号运算符

for(int i = 0 , int j = 1 ; i < j ; i++ , j++){
...
}
上一篇下一篇

猜你喜欢

热点阅读