一、编写程序时使用变量
在用任何语言编写程序时,您需要使用各种变量来存储各种信息。变量不过是用来存储值的预留内存位置。这意味着当你创建一个变量时,你就预留了一些内存空间。
你可能想要存储不同类型的数据,比如字符、宽字符、整数、浮点数、双精度浮点数、布尔值等。根据变量的数据类型,操作系统分配内存并决定可以在预留内存中存储什么。
二、基本内置类型
C++ 提供了丰富的内置和用户定义的数据类型。下表列出了七种基本的 C++ 数据类型:
类型 |
关键字 |
布尔 |
bool |
字符 |
char |
整数 |
int |
浮点 |
float |
双精度浮点 |
double |
无值 |
void |
宽字符 |
wchar_t |
许多基本类型可以使用以下一种或多种类型修饰符来修改:
下表显示了变量类型、存储在内存中的值所需的内存量以及可以在此类变量中存储的最大和最小值。
类型 |
典型位宽 |
典型范围 |
char |
1字节 |
-127 至 127 或 0 至 255 |
unsigned char |
1字节 |
0 至 255 |
signed char |
1字节 |
-127 至 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 至 65535 |
signed short int |
2字节 |
-32768 至 32767 |
long int |
8字节 |
-9223372036854775808 至 9223372036854775807 |
signed long int |
8字节 |
同 long int |
unsigned long int |
8字节 |
0 至 18446744073709551615 |
long long int |
8字节 |
-(2^63) 至 (2^63)-1 |
unsigned long long int |
8字节 |
0 至 18,446,744,073,709,551,615 |
float |
4字节 |
|
double |
8字节 |
|
long double |
12字节 |
|
wchar_t |
2 或 4 字节 |
1 个宽字符 |
变量的大小可能会有所不同,具体取决于您使用的编译器和计算机。
三、例子
下面是示例代码,它将在您的计算机上输出各种数据类型的正确大小。
#include <iostream>
using namespace std;
int main() {
cout << "Size of char : " << sizeof(char) << endl;
cout << "Size of int : " << sizeof(int) << endl;
cout << "Size of short int : " << sizeof(short int) << endl;
cout << "Size of long int : " << sizeof(long int) << endl;
cout << "Size of float : " << sizeof(float) << endl;
cout << "Size of double : " << sizeof(double) << endl;
cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
return 0;
}
这个示例使用了 endl
,它在每一行后插入了一个换行符,并使用了 <<
操作符将多个值传递到屏幕上。我们也使用 sizeof()
操作符来获取各种数据类型的大小。
当上述代码被编译和执行时,它会产生以下结果,结果可能会因机器而异:
Size of char : 1
Size of int : 4
Size of short int : 2
Size of long int : 4
Size of float : 4
Size of double : 8
Size of wchar_t : 4
四、例子
下面是另一个示例:
#include <iostream>
#include <limits>
using namespace std;
int main() {
std::cout << "Int Min " << std::numeric_limits<int>::min() << endl;
std::cout << "Int Max " << std::numeric_limits<int>::max() << endl;
std::cout << "Unsigned Int Min " << std::numeric_limits<unsigned int>::min() << endl;
std::cout << "Unsigned Int Max " << std::numeric_limits<unsigned int>::max() << endl;
std::cout << "Long Int Min " << std::numeric_limits<long int>::min() << endl;
std::cout << "Long Int Max " << std::numeric_limits<long int>::max() << endl;
std::cout << "Unsigned Long Int Min " << std::numeric_limits<unsigned long int>::min() << endl;
std::cout << "Unsigned Long Int Max " << std::numeric_limits<unsigned long int>::max() << endl;
}
五、派生数据类型
在 C++ 中,通过预定义的数据类型获得的数据类型被称为派生数据类型。这些可以分为四类:
-
函数 函数是最简单的用户定义的数据类型。它包含返回类型、函数名和输入参数。
语法:
return_type function_name(input_param1, input_param2…){
<function_body>
}
示例:
#include <iostream>
using namespace std;
string func(int n){
if(n%2) return "Given number is Odd !";
else return "Given number is Even !";
}
int main(){
int a;
cin >> a;
cout << func(a);
return 0;
}
输出:
Given number is Even !
-
数组 数组是由相同数据类型的一系列元素组成的。数组的元素存储在连续的内存位置。
语法:
data_type array_name[array_size];
示例:
#include <iostream>
using namespace std;
int main(){
int arr[5] = {1,2,3,2,1};
for(auto it:arr)
cout << it << " ";
return 0;
}
输出:
1 2 3 2 1
-
指针 指针是对先前定义的元素的引用。指针的值返回与其关联的元素的地址位置。
语法:
data_type * pointer_name = &variable_name;
示例:
#include <iostream>
using namespace std;
int main() {
int a = 20;
int *p = &a;
cout << "Address of variable a: " << p << endl;
cout << "Value of variable a: " << *p << endl;
return 0;
}
输出:
Address of variable a: 0x7ffc49a8637c
Value of variable a: 20
-
引用 引用变量用于创建一个变量的副本,具有相同的引用。因此,对引用变量所做的更改也会反映在原始变量上。
语法:
data_type & reference_name = variable_name;
示例:
#include <iostream>
using namespace std;
int main(){
int c = 11;
int& refer = c;
cout << "Initially value of integer is: " << c << endl;
refer = 121;
cout << "After changing value using refer variable :" << c << endl;
return 0;
}
输出:
Initially value of integer is: 11
After changing value using refer variable :121
六、用户定义的数据类型
直观地由用户定义而不是使用任何预定义数据类型的数据类型被称为用户定义的数据类型。这些数据类型可以进一步分为五种类型:
-
类 类是在面向对象编程中定义的自定义数据类型,用于构造对象。它是对象的框架,并且可以包含构造函数、方法以及像多态性和继承等面向对象的概念。
语法:
class Class_name{
<class body>
class_name(parameters) {
<constructor body>
}
return_type method_name(paremeters){
<method body>
}
}
示例:
#include <iostream>
using namespace std;
class TP{
public:
string tp;
void print(){
cout << tp << endl;
}
};
int main(){
TP object;
object.tp = "I Love Tutorialspoint !!!";
object.print();
return 0;
}
输出:
I Love Tutorialspoint !!!
-
结构体(struct) 在结构体数据类型中,用户可以在结构体内引入多个基本数据类型。
语法:
struct struct_name{
data_type1 var_name1;
data_type2 var_name2;
…
}
示例:
#include <iostream>
using namespace std;
struct TP{
string tp;
int grade;
};
int main(){
TP object;
object.tp = "I Love Tutorialspoint !!!";
object.grade = 10;
cout << object.tp << endl;
cout << "How much would you rate it?" << " : " << object.grade;
return 0;
}
输出:
I Love Tutorialspoint !!!
How much would you rate it? : 10
-
联合体 联合体与结构体相似。在这里,所有变量的内存位置是相同的,并且所有变量共享相同的引用。因此,一个值的改变会导致所有其他值的变化。
语法:
union union_name{
data_type var_name1;
data_type var_name2;
};
七、联合体(Union)示例
#include <iostream>
using namespace std;
union TP {
int tp1, tp2;
};
int main() {
union TP t;
t.tp1 = 2;
cout << "Value of tp1 initially: " << t.tp1 << endl;
t.tp2 = 4;
cout << "When we change tp2, value of tp1 is : " << t.tp1 << endl;
return 0;
}
输出:
Value of tp1 initially: 2
When we change tp2, value of tp1 is : 4
八、枚举类型(Enum)
枚举或简称 enum 是用户定义的数据类型,用于为程序中的整数常量命名。这增加了程序的可读性。
语法:
enum enum_name{
var_name1, var_name2, …
}
示例:
#include <iostream>
using namespace std;
enum TP { C, Java, Python, Ruby, Kotlin, Javascript, TypeScript, Others };
int main() {
enum TP course;
cout << "Which course do you love the most?" << endl;
course = Kotlin;
cout << "I love the " << course + 1 << "th course !!!";
return 0;
}
输出:
Which course do you love the most?
I love the 5th course !!!
九、类型定义声明(typedef)
你可以使用 typedef
为现有的类型创建一个新的名称。以下是使用 typedef
定义新类型的简单语法:
typedef type newname;
例如,下面告诉编译器 feet
是 int
的另一个名称:
typedef int feet;
现在,以下声明是完全合法的,并创建了一个名为 distance
的整数变量:
feet distance;
十、枚举类型
枚举类型声明了一个可选的类型名称和一个或多个标识符集,这些标识符可以用作该类型的值。每个枚举器都是一个常量,其类型就是枚举本身。
创建枚举需要使用关键字 enum
。枚举类型的通用形式如下:
enum enum-name { list of names } var-list;
这里,enum-name
是枚举的类型名称。list of names
是逗号分隔的。
例如,下面的代码定义了一个称为 colors
的颜色枚举,并且创建了类型为 color
的变量 c
。最后,c
被赋值为 "blue"
。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值是 0,第二个名称的值是 1,第三个名称的值是 2,依此类推。但是,可以通过添加初始化器给名称指定特定的值。例如,在下面的枚举中,green
将有值 5。
enum color { red, green = 5, blue };
这里,blue
将有一个值 6,因为每个名称都将比前面的一个大 1。