0%

C/C++编程—数据类型

C++提供了种类丰富的内置数据类型和用户自定义数据类型,本文主要记录C++中的数据类型,包括七种基本数据类型,以及指针、数组、枚举、结构体等复合数据类型

1. 数组的初始化

C/C++中数组的初始化方法多,规则也比较混乱,使用时容易出现错误。对数组进行初始化的方法通常有三种:初始化列表memset()函数for循环

1.1 静态数组的初始化

1
2
3
4
5
6
7
8
9
10
11
int arr_A[] = {1,2,3}; // 初始化列表,数组长度等于初始化列表长度
int arr_B[cnt];
memset(arr_B,1,cnt*size0f(int)); // memset()初始化数组为指定的值
int arr_C[rows*cols];
for(int i = 0; i < rows; i++) // for循环进行初始化
{
for(int j = 0; j < cols; j++)
{
arr_C[i * cols + j] = 0;
}
}

NOTE:

  • 初始化列表中元素的个数小于数组长度时,不足的元素补以默认值
    1
    int arr_A[5]= {1}; // 等同于arr_A[5]={1,0,0,0,0}
  • 数组创建后不进行初始化,数组中的元素(全局数组和静态数组默认初始化为0)为随机值
  • 对于数组不能进行赋值操作,只能对数组元素进行赋值。如果要将一个数组赋给另一个数组,可以采用循环赋值或者借助memcpy()函数

1.2 动态数组的初始化

动态数组的初始化遵循静态数组初始化的规则,除此之外,动态数组的初始化还有一种新的语法。

1
2
3
4
5
6
int* pArr1 = new int[cnt]{0}; // 将动态数组初始化为0,需要调用delete[] pArr1进行内存释放
std::string* pArr2 = new std::string[cnt]{"str"};
int* pArr3 = new int[cnt];
memset(pArr3,1,sizeof(pArr3));

int* pArr4 = new int[cnt](); // 数组初始化为0,括号内不能写其他值,只能初始化为0

1.3 二维数组的定义和初始化

静态二维数组

1
2
int Arr_A[2][3] = { {1,2,3},{4,5,6} }; // 等同于int Arr_A[2][3]={1,2,3,4,5,6}
int arr[rows][cols];

动态二维数组

1
2
3
4
5
6
7
8
9
10
11
12
  // 申请空间
int** arr = new int*[rows];
for(int i = 0; i < rows; i++)
{
arr[i] = new int[cols];
}
// 释放空间
for(int i = 0; i < rows; i++)
{
delete[] arr[i];
}
delete[] arr;

利用std::vector创建二维数组

1
2
3
4
5
6
7
8
vector<vector<int>> arr(rows,vector<int>(cols));
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
arr[i][j] = 0;
}
}

参考文献 & 资源链接