当前位置: 首页 > news >正文

C++ 编程基础(一):输入/输出、数据类型与变量管理

目录

  • 一、cin和cout
    • 1.`using`引入整个命名空间
    • 2.使用`using`限定符引入特定成员
      • 3.使用std::显式引用
  • 二、基本数据类型
    • 1.整型
      • 有符号和无符号
    • 2.浮点型
    • 3.字符型
    • 4.布尔值
    • 5.空类型(void)
    • 6.使用 sizeof() 查看类型大小
    • 7.转义字符
  • 三、复合数据类型
    • 1.引用
    • 2.指针
    • 3.数组
    • 4.结构体
    • 5.枚举
    • 6.联合体
    • 7.类
  • 四、变量与常量
    • 1.变量
    • 2.常量
      • const修饰符
      • constexpr(常量表达式,C++11)
      • 字面量常量
    • 3.作用域与生命周期
      • 局部变量
      • 全局变量
  • 五、类型别名
    • 1.`typedef`:传统方式
    • 2.`using`:现代 C++ 方式(推荐)
    • 3.`auto` 关键字

一、cin和cout

cincout是我们最常使用的输入和输出函数。它们都定义在std命名空间中。使用时必须引入或限定std命名空间。

要引用一个命名空间中的内容,有三种方法:

  1. 使用using引入命名空间
  2. 使用using限定符
  3. 直接使用命名空间限制访问

1.using引入整个命名空间

语法:

using namespace std;

在一开始使用using完全引入std命名空间,可以直接使用std命名空间中的所有内容。

2.使用using限定符引入特定成员

语法:

using std::cout;
using std::cin;

仅引入std命名空间中的coutcin,接下来使用coutcin时,不需要带命名空间了。

3.使用std::显式引用

std::cin
std::cout

cincout可以一次性输入任意多个变量的值。还有clogcerr,分别用于输出缓冲的日志信息和非缓冲的错误信息。

int a, b, c; 
cin >> a >> b >> c;
cout << a << b << c;

二、基本数据类型

C++中的基本数据类型可以大致分为几类:整型、浮点型、字符型、布尔型、空类型。

1.整型

类型关键字占用空间取值范围说明
字符型char1字节−27-2^727 ~ 272^727 或 0 到~28−12^8-1281本质是整数,常用于字符
短整型shortshort int2字节−215-2^{15}215 ~ 215−12^{15}-12151
整型int4 字节−231-2^{31}231 ~ 231−12^{31}-12311最常用
长整型longlong int4或8字节Windows 4字节,Linux/Unix 8字节
超长整型long longlong long int8字节−263-2^{63}263 ~$ 2^{63}-1$

有符号和无符号

整型可以分为**有符号(signed)无符号(unsigned)**两种:

  • signed:可以表示正数、负数和零(默认)
  • unsigned:只能表示非负数(0 及正数),范围更大
unsigned int age = 25;        // 只能存非负数 
signed char c = -10;          // 可以存负数

以上类型除了char,都是带符号的,在类型名前加unsigned得到无符号类型。字符型有三类:charsigned charunsigned char,类型char会表现为带符号的和无符号中的一种,具体由编译器决定。

2.浮点型

浮点型用于表示带有小数的实数。

类型关键字占用空间精度说明
单精度浮点数float4字节约6 ~ 7 位有效数字
双精度浮点数double8字节约15 ~ 16 位有效数字更常用
长双精度浮点数long double8或16 字节更高精度依赖编译器
float price = 19.99f;         // f 后缀表示 float
double pi = 3.141592653589793;
long double bigNum = 1.234567890123456789L;

3.字符型

char 类型用于存储单个字符,如 'A', '1', '$' 等。它本质上是一个1字节的整数,使用 ASCII 编码或其他字符集。

char grade = 'A';
char digit = '5';
char symbol = '@';

注意:字符用单引号 ' ' 包裹,字符串用双引号 " "

char 可以参与算术运算,因为它对应一个整数值:

char c = 'B';
cout << c << endl;    // 输出: B
cout << (int)c << endl; // 输出: 66 (ASCII 值)

为了处理中文、日文等非ASCII字符,C++提供了宽字符类型wchar_t。它的大小为2 字节(Windows)或 4 字节(Linux/Unix),支持Unicode字符集(如UTF-16或UTF-32),使用 L 前缀表示宽字符或宽字符串。

#include <iostream>
#include <cwchar>int main() {wchar_t chineseChar = L'中'; // 宽字符// 使用 wcout 输出宽字符(需配合 wcin/wcout)std::wcout << L"单个字符: " << chineseChar << std::endl;return 0;
}

4.布尔值

布尔类型 bool 用于表示逻辑值,只有两个取值:

  • true(真,通常对应 1)
  • false(假,通常对应 0)

5.空类型(void)

void 表示“无类型”,不能用来定义变量,但可以用于:

  • 函数返回类型(表示无返回值):

    void printHello() {cout << "Hello, C++!" << endl;
    }
    
  • 指针类型(void*,通用指针):

    void* ptr = &someVariable;
    

6.使用 sizeof() 查看类型大小

C++ 提供 sizeof 操作符,用于获取数据类型或变量所占的字节数:

#include <iostream>
using namespace std;int main() {cout << "int 大小: " << sizeof(int) << " 字节" << endl;cout << "double 大小: " << sizeof(double) << " 字节" << endl;cout << "char 大小: " << sizeof(char) << " 字节" << endl;return 0;
}

7.转义字符

转义字符以反斜杠 \ 开头,用于表示一些无法直接输入或具有特殊功能的字符。

转义字符含义ASCII码值(十进制)
\a警报007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\\代表一个反斜线字符“\”092
\'代表一个单引号(撇号)字符039
\"代表一个双引号字符034
\?代表一个问号063
\0数字0000
\ddd8进制转义字符,d范围0~73位8进制
\xhh16进制转义字符,h范围0-9,a-f,A-F3位16进制

三、复合数据类型

复合类型是基于已有类型创建的新类型。这里介绍一些常见的复合数据类型。

1.引用

引用是某个已存在变量的别名。一旦绑定,引用和原变量共享同一块内存,对引用的所有操作都是在与之绑定的对象上进行的。

int n = 100;
int &ref = n; // ref是n的别名ref = 200; // 修改ref实际上修改了n
cout << n; // 输出:200

2.指针

指针是一个变量,它存储的是另一个变量的内存地址,要想获取某个变量的地址,需要使用取地址符(&)

int val = 40;
int *ptr = &val;cout << ptr; // 输出地址
cout << *ptr; // 输出:40(解引用)

使用时建议初始化指针,避免野指针

int *p1 = nullptr;  // 推荐:类型安全
int *p2 = NULL;     // C 风格,本质是 0
int *p3 = 0;        // 不推荐

3.数组

数组是一组相同类型的元素的集合,存储在连续的内存中。数组名本身指向的是首元素地址。

int arr[3] = {10, 20, 30};
int *p = arr;       // p 指向 arr[0]cout << *(p + 1);   // 输出 20,等价于 arr[1]

4.结构体

结构体是一种用户自定义的复合类型,用于将不同类型的数据组合在一起。

struct Student {std::string name;int age;double gpa;
}; // 表示一个学生// 使用结构体
Student s1;
s1.name = "Alice";
s1.age = 20;
s1.gpa = 3.8;// 初始化(C++11 花括号语法)
Student s2{"Bob", 19, 3.5};

5.枚举

枚举用于定义一组命名的整数常量,提高代码的可读性和类型安全性。

enum Color {RED,    // 0GREEN,  // 1BLUE    // 2
};Color c = RED;

6.联合体

联合体是一种特殊的数据结构,所有成员共享同一块内存。在任意时刻,只能有一个成员有值。大小等于最大成员的大小。

union Data {int i;double d;char c;
};

7.类

类是 C++ 面向对象编程(OOP)的核心,是结构体的扩展,支持:

  • 数据封装(private, public, protected
  • 成员函数(方法)
  • 构造函数、析构函数
  • 继承、多态、运算符重载等
class Rectangle {
private:double width, height;public:Rectangle(double w, double h) : width(w), height(h) {}double area() const {return width * height;}
};Rectangle r(3.0, 4.0);
cout << r.area() << endl; // 12

structclass 的唯一区别是默认访问权限:

  • struct 默认 public
  • class 默认 private

四、变量与常量

1.变量

变量是程序中用于存储数据的命名内存单元。
​变量初始化 (C++11 统一初始化)​现代 C++ 强烈推荐使用花括号 {} 进行初始化,因为它能防止窄化转换等潜在的类型安全问题。

初始化方式示例
复制初始化int x = 5;
直接初始化int x(5);
花括号初始化int x{5};int x = {5};
double d = 3.14159;
int bad{d};    // 编译错误:窄化转换(double → int)
int good = d;  // 会丢失精度

2.常量

常量是一旦初始化后就不能修改的值。使用常量可以提高代码的可读性和安全性。

const修饰符

使用关键字const可以把变量定义为常量,有效防止变量的值在程序执行中不小心被改变。

const int MAX_STUDENTS = 50; // const对象必须初始化
const double PI = 3.1415926;
const char NEWLINE = '\n';

constexpr(常量表达式,C++11)

常量表达式指的是值不会改变且在编译过程就能得到计算结果的表达式。constexpr 用于声明编译期常量,其值必须在编译时就能确定。

constexpr int square(int x) {return x * x;
}constexpr int size = square(5); // 在编译时计算,结果为 25

字面量常量

直接出现在代码中的值,属于常量表达式。

int days = 365;
double pi = 3.14159;
char grade = 'A';
string name = "Alice";

365、3.14159、‘A’、"Alice"都是字面量。

3.作用域与生命周期

局部变量

  • 定义在函数内部
  • 生命周期:从定义到函数结束
  • 存储在栈上
void func() {int localVar = 10; // 局部变量
} // localVar 在此处销毁

全局变量

  • 定义在所有函数之外
  • 生命周期:整个程序运行期间
  • 默认初始化为 0(如果是内置类型)
int globalVar = 100; // 全局变量void func() {cout << globalVar; // 可访问
}

五、类型别名

在 C++ 编程中,有时我们会遇到非常长或复杂的类型声明,这些类型不仅难写,而且降低了代码的可读性。类型别名就是为了解决这个问题而生的。

1.typedef:传统方式

typedef 已有类型 新类型名;

示例:

typedef unsigned long ulong;
typedef int (*FuncPtr)(int, int); // 函数指针别名ulong population = 1000000;

2.using:现代 C++ 方式(推荐)

using 新类型名 = 已有类型;

示例:

using IntVector = std::vector<int>;
using Ptr = int*;IntVector numbers = {10, 20, 30};

3.auto 关键字

​auto 关键字用于进行类型推导,让编译器根据初始化表达式自动确定变量的类型,它不是类型别名。

auto i = 10;          // i 被推导为 int
auto d = 3.14;        // d 被推导为 double
auto result = func(); // result 类型与 func() 返回值类型相同
http://www.dtcms.com/a/463123.html

相关文章:

  • 专业网站建设管理网站建设推广一对一服务
  • Java 开发面试复盘 - 杭州 2025
  • MySQL索引调优之索引顺序必须和字段顺序一致吗?
  • 国内做的比较好的跨境电商网站兰州的互联网公司
  • utf8, utf16, utf32在前256个字符是不是一样的?
  • asp.net网站开发江苏建设工程网
  • 海南州建设厅官方网站微商的自己做网站叫什么软件
  • 深圳有没有做网站的微信小程序云开发模板
  • CodeForces Round 1046(div.1)A题
  • 大连营商环境建设局网站wordpress勋章
  • 专业沈阳网站制作做网站美工要学什么软件
  • 如何设置便于搜索引擎收录的网站结构WordPress切换经典编辑器
  • 优秀网站推荐桂林网红餐厅
  • 细节判断题
  • stm32延时函数
  • 磁共振成像原理(理论)22:图像重建的常见问题 (General Issues of Image Reconstruction)
  • asp转换手机网站网页素材下载
  • 微网站建设正规公司招工网站58同城
  • 企业大型网站开发网站模板设计大岭山建设网站
  • 帝国cms做网站辽宁城乡建设集团成立网站
  • ajaxjsp网站开发从入门到精通销售客户管理软件哪个好
  • 网站的速度品牌策划招聘
  • 第一步:基于node创建一个Nest.js项目
  • wordpress template hierarchyseo平台有哪些
  • 做外贸网站建设南昌网站排名优化报
  • 冲刺校招 打卡 day04
  • mysql数据库学习之SQL优化(八)
  • 超越CNN和Transformer!Mamba结合多模态统领图像任务!
  • 开发网站那个好珠海网站制作策划
  • shtml怎么做网站为什么进不了中国建设银行网站