陕西省城乡建设学校网站钢材网站建设
数据类型
| 类型 | 位 | 范围 | 
|---|---|---|
| char | 1 个字节 | -128 到 127 或者 0 到 255 | 
| unsigned char | 1 个字节 | 0 到 255 | 
| signed char | 1 个字节 | -128 到 127 | 
| int | 4 个字节 | -2147483648 到 2147483647 | 
| unsigned int | 4 个字节 | 0 到 4294967295 | 
| signed int | 4 个字节 | -2147483648 到 2147483647 | 
| short int | 2 个字节 | -32768 到 32767 | 
| unsigned short int | 2 个字节 | 0 到 65,535 | 
| signed short int | 2 个字节 | -32768 到 32767 | 
| long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 
| signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 
| unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 | 
| float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) | 
| double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) | 
| long long | 8 个字节 | 双精度型占8 个字节(64位)内存空间,表示 -9,223,372,036,854,775,807 到 9,223,372,036,854,775,807 的范围 | 
| long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 | 
| wchar_t | 2 或 4 个字节 | 1 个宽字符 | 
-  
整数类型(Integer Types):
int:用于表示整数,通常占用4个字节。short:用于表示短整数,通常占用2个字节。long:用于表示长整数,通常占用4个字节。long long:用于表示更长的整数,通常占用8个字节。
 -  
浮点类型(Floating-Point Types):
float:用于表示单精度浮点数,通常占用4个字节。double:用于表示双精度浮点数,通常占用8个字节。long double:用于表示更高精度的浮点数,占用字节数可以根据实现而变化。
 -  
字符类型(Character Types):
char:用于表示字符,通常占用1个字节。wchar_t:用于表示宽字符,通常占用2或4个字节。char16_t:用于表示16位Unicode字符,占用2个字节。char32_t:用于表示32位Unicode字符,占用4个字节。
 -  
布尔类型(Boolean Type):
bool:用于表示布尔值,只能取true或false。
 -  
枚举类型(Enumeration Types):
enum:用于定义一组命名的整数常量。
 -  
指针类型(Pointer Types):
type*:用于表示指向类型为type的对象的指针。
 -  
数组类型(Array Types):
type[]或type[size]:用于表示具有相同类型的元素组成的数组。
 -  
结构体类型(Structure Types):
struct:用于定义包含多个不同类型成员的结构。
 -  
类类型(Class Types):
class:用于定义具有属性和方法的自定义类型。
 -  
共用体类型(Union Types):
union:用于定义一种特殊的数据类型,它可以在相同的内存位置存储不同的数据类型。
 
枚举类型
enum num { ZERO, ONE, TWO } ; 
0 1 2
第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。
enum num { ZERO, ONE=5, TWO } ; 
0 5 6
数据类型转换
静态转换
int i = 10;
float f = (float)i;
float f = static_cast<float>(i); // 静态将int类型转换为float类型 
静态转换通常用于比较类型相似的对象之间的转换,例如将 int 类型转换为 float 类型。
动态转换
class Base {};
class Derived : public Base {};
Base* ptr_base = new Derived;
Derived* ptr_derived = (Derived*)ptr_base;
Derived* ptr_derived = dynamic_cast<Derived*>(ptr_base); // 将基类指针转换为派生类指针 
将一个基类指针或引用转换为派生类指针或引用。
常量转换
const int i = 10;
int& r = const_cast<int&>(i); // 常量转换,将const int转换为int 
常量转换用于将 const 类型的对象转换为非 const 类型的对象。
常量转换只能用于转换掉 const 属性,不能改变对象的类型。
重新解释转换
int i = 10;
float f = reinterpret_cast<float&>(i); // 重新解释将int类型转换为float类型 
一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。
变量作用域
局部变量
函数或一个代码块内部声明的变量,局部变量被定义时,系统不会对其初始化。
-  
局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。
 -  
块作用域:内部作用域中的变量 a 将覆盖外部作用域中的变量 a,在内部作用域中访问 a 时输出的是20,而在外部作用域中访问 a 时输出的是 10。
 -  
#include <iostream>int main() {int a = 10;{int a = 20; // 块作用域变量std::cout << "块变量: " << a << std::endl;}std::cout << "外部变量: " << a << std::endl;return 0; } 
全局变量
定义全局变量时,系统会自动初始化为0、NULL。
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。
局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。
-  
全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。
 
类作用域
#include <iostream>class MyClass {
public:static int class_var;  // 类作用域变量
};int MyClass::class_var = 30; 
MyClass 类中声明了一个名为 class_var 的类作用域变量。可以使用类名和作用域解析运算符 :: 来访问这个变量。
