一、基本数据类型初始1. 基本数据类型的初始化1.1 传统初始化方式默认初始化 若定义变量是没有提供初始值变量会进行默认初始化对于内置类型(eg: int、double等)在函数体外定义的变量会被初始化为0在函数体内定义的变量值是未定义的int global_int; // 函数体外初始化为0 void func() { int local_int; // 函数体内值未定义 }直接初始化使用括号进行初始化int num(10); // 直接初始化num 的值为 10注意将变量初始化为0时int b(0) 与 int b() 区别// 将变量初始化为 0 int num(0); //int num(); // 不可这样写会被系统认为是函数的声明 int a int(); // 对于内置类型默认构造函数将变量初始化为0拷贝初始化使用等号进行初始化int num 10; // 拷贝初始化num 的值为 101.2 列表初始化 (C及以后)列表初始化使用花括号{}进行初始化可防止缩窄转换即数据精度降低的转换int main() { int a 10; int b(10); int c int(10); int d { 10 }; // 等价 a int e{ 10 }; // 等价 b int f int{ 10 }; // 等价 c return 0; }注意初始化为 0 时int main() { int a 0; int b(0); //int b(); //不可这样写会被系统认为是函数的声明 int c int(); //对于内置类型默认构造函数将变量初始化为0 // C11及其后使用{ },对于内置类型列表初始化会将变量初始化为 0 int d {}; int e{}; int f int{}; return 0; }2. 数组初始化2.1 静态数组初始化int arr1[5] {1, 2, 3, 4, 5}; // 显式初始化数组元素 int arr2[5] {1, 2}; // 部分初始化剩余元素初始化为 0 int arr3[] {1, 2, 3}; // 省略数组大小根据初始化列表确定数组大小 int arr4[5]{}; // int arr4[5] {}; 数组所有元素初始化为 02.2 动态数组初始化 (使用 new)int* arr new int[5]{1, 2, 3, 4, 5}; // 动态数组初始化 delete[] arr; // 使用完后需要释放内存3. 结构体初始化struct Student { char s_name[10]; int s_age; }; int main() { struct Student ds {}; struct Student dy {张三, 18 }; return 0; }二、数据转换 --- 隐式转换 (自动类型转换)1. 赋值时的隐式转换#include iostream using namespace std; int main() { float ft 12.23; int a ft; // 隐式转换 int a {(int) ft}; cout a 的值为: a endl; // 输出 12 return 0; } //编译器会自动将 float 类型的 ft 转换为 int 类型转换会截断小数部分只保留整数部分2. 算术运算中的隐式转换在进行算术运算时如果操作数的类型不同编译器会自动将它们转换为相同的类型。一般遵循整数提升较小的整数类型如char、short会提升为int类型。#include iostream using namespace std; int main() { int num1 10; float num2 3.14; double result num1 num2; // num1 会隐式转换为 float 类型然后结果转换为 double 类型 cout 结果为: result endl; return 0; }
【C++入门】 初始化
一、基本数据类型初始1. 基本数据类型的初始化1.1 传统初始化方式默认初始化 若定义变量是没有提供初始值变量会进行默认初始化对于内置类型(eg: int、double等)在函数体外定义的变量会被初始化为0在函数体内定义的变量值是未定义的int global_int; // 函数体外初始化为0 void func() { int local_int; // 函数体内值未定义 }直接初始化使用括号进行初始化int num(10); // 直接初始化num 的值为 10注意将变量初始化为0时int b(0) 与 int b() 区别// 将变量初始化为 0 int num(0); //int num(); // 不可这样写会被系统认为是函数的声明 int a int(); // 对于内置类型默认构造函数将变量初始化为0拷贝初始化使用等号进行初始化int num 10; // 拷贝初始化num 的值为 101.2 列表初始化 (C及以后)列表初始化使用花括号{}进行初始化可防止缩窄转换即数据精度降低的转换int main() { int a 10; int b(10); int c int(10); int d { 10 }; // 等价 a int e{ 10 }; // 等价 b int f int{ 10 }; // 等价 c return 0; }注意初始化为 0 时int main() { int a 0; int b(0); //int b(); //不可这样写会被系统认为是函数的声明 int c int(); //对于内置类型默认构造函数将变量初始化为0 // C11及其后使用{ },对于内置类型列表初始化会将变量初始化为 0 int d {}; int e{}; int f int{}; return 0; }2. 数组初始化2.1 静态数组初始化int arr1[5] {1, 2, 3, 4, 5}; // 显式初始化数组元素 int arr2[5] {1, 2}; // 部分初始化剩余元素初始化为 0 int arr3[] {1, 2, 3}; // 省略数组大小根据初始化列表确定数组大小 int arr4[5]{}; // int arr4[5] {}; 数组所有元素初始化为 02.2 动态数组初始化 (使用 new)int* arr new int[5]{1, 2, 3, 4, 5}; // 动态数组初始化 delete[] arr; // 使用完后需要释放内存3. 结构体初始化struct Student { char s_name[10]; int s_age; }; int main() { struct Student ds {}; struct Student dy {张三, 18 }; return 0; }二、数据转换 --- 隐式转换 (自动类型转换)1. 赋值时的隐式转换#include iostream using namespace std; int main() { float ft 12.23; int a ft; // 隐式转换 int a {(int) ft}; cout a 的值为: a endl; // 输出 12 return 0; } //编译器会自动将 float 类型的 ft 转换为 int 类型转换会截断小数部分只保留整数部分2. 算术运算中的隐式转换在进行算术运算时如果操作数的类型不同编译器会自动将它们转换为相同的类型。一般遵循整数提升较小的整数类型如char、short会提升为int类型。#include iostream using namespace std; int main() { int num1 10; float num2 3.14; double result num1 num2; // num1 会隐式转换为 float 类型然后结果转换为 double 类型 cout 结果为: result endl; return 0; }