- 变量及变量类型
- 变量作用域(变量生命周期):全局作用域、类作用域、块作用域、局部作用域
- 常量和引用
- 指针
变量就是程序中用于存储数据的一个名称,通过变量来表示不同的对象,比如有用户1和用户2,如果需要表示该二个用户的名称,在程序里面就需要二个变量来存储,如下例子:
- const char* user1Name{"Yang Sir"}; // 用户1名称
- const char* user2Name{"Li Sir"}; // 用户2名称
-
- user1Name, user2Name 是变量名;数据类型是 const char*(字符串);
- user1Name 的值是 "Yang Sir";user2Name 的值是 "Li Sir"
定义变量需要指定变量数据类型,各种数据类型变量例子如下:
- #include
-
- /************************
- * 各种数据类型变量示例
- *************************/
- // 布尔型
- bool isEnabled{true}
- bool isDisabled{false}
- // 字符型
- char inputChar1{'A'};
- unsigned char inputChar2{'A'};
- wchar_t inputWChar{'A'};
- // 字符串
- std::string fileName;
- char filePath[260]{""};
- // 整形
- short number1{0};
- unsigned short number2{0};
- int number3{0};
- unsigned int number4{0};
- long long number5{0};
- unsigned long long number6{0};
- // 浮点型
- float inputNumber1{0.0};
- double inputNumber2{0.0};
- // 枚举类型
- enum ColorType {
- COLOR_UNKNOWN // 0:示知类型
- , COLOR_RED // 1:红色
- };
- ColorType colorType = ColorType::COLOR_RED;
-
- // 结构体
- struct FileInfo
- {
- char fileName[260]; // 文件名称
- char filePath[260]; // 文件路径
- unsigned long long fileSize = 0; // 文件大小
- };
- FileInfo fileInfo;
- // 类
- class UserInfo
- {
- public:
- std::string m_userName; // 用户名称
- int m_userAge{0}; // 用户年龄
- };
- UserInfo userInfo;
- // 指针
- UserInfo user1;
- UserInfo* userPointer = &user1;
- int age = 0;
- int* agePointer = &age;
-
- // 数组
- int ageList[10];
- FileInfo fileList[10];
变量作用域:全局作用域、类作用域,局部作用域,块作用域
- /***************************************************************
- * 变量作用域示例:全局作用域、类作用域,局部作用域,块作用域
- ***************************************************************/
- // 全局作用域:变量定义在任意{}外面,生命周期全局有效
- int theFileSize{0};
-
- // 类作用域:class类成员变量,类生命周期内有效
- class CarInfo
- {
- public:
- std::string m_carName;
- };
-
- // 局部作用域,块作用域:生成周期在指定{}内部
- void lesson3_test()
- {
- // minValue,maxValue 生命周期在lesson3_test()函数内局部【局部作用域】有效
- unsigned int minValue = -1; // 最小值
- unsigned int maxValue = 0; // 最大值
-
- std::random_device rd;
- for (int i = 0; i < 100; i++) {
- // value 生命周期在 for循环代码块【块作用域】内有效
- unsigned int value = rd();
- std::cout << i << " : " << value << std::endl;
- if (value < minValue)
- minValue = value;
- else if (value > maxValue)
- maxValue = value;
- }
-
- }
整数的三种表示形式:十进制、八进制和十六进制;
- /****************************************************************************************
- * 整数有三种表示形式:十进制,八进制,十六进制
- * 十进制:除表示正负(+ -)符号外,以数字1~9开头,由数字0到9组成组成;如 127,+126,-376
- * 八进制:以数字0开头,由0~7组成的数;如 0215,03240
- * 十六进制:以0X或0x开头,由0~9,A~F(或a~f)组成;如 0x1024, 0x2408a0
- ****************************************************************************************/
- // 整数常量示例
- int n1 = 600; // 十进制
- int n2 = 0600; // 八进制
- int n3 = 0x60f; // 十六进制
常量是指固定不能修改的值;
- // 如下例子:10和10.1是数值常量;
- // inputNumber1, inutNumber2 是常量变量
- const int inputNumber1{10};
- const float inputNumber2{10.1};
- /***************************************************************
- * 引用示例;
- * aliasValue1是一个引用变量,指向value1变量
- * value1的值修改,aliasValue1的值也会跟着一起修改
- * 反过来,修改aliasValue1的值,value1的值也一样跟着修改
- ****************************************************************/
- int value1 = 100;
- int& aliasValue1 = value1;
- value1 = 200; // 引用变量 aliasValue2 的值 也跟着改变
- aliasValue1 = 10; // 变量 value1 的值也跟着改变
- /***************************************************************
- * 常量引用示例:
- * aliasValue2,aliasValue3.aliasValue4都是常量引用
- ****************************************************************/
- int value2 = 100;
- const int value3 = 100;
- const int& aliasValue2 = value2; // value2变量的值改变,aliasValue2的值也会跟着一起改变
- const int& aliasValue3 = value3;
- const int& aliasValue4 = 100;
普通指针变量用 (new) 来创建,如 (int * p = new int{0};); 对应需要用 (delete) 来删除,如 (delete p;)
创建指针数组例子:int * p = new int[10],对应用 (delete[] p)来删除,如 (delete[] p;)
用 (&value) 来取普通变量指针地址,如 (int v{100}; int * p = &v;)
内置基础类型变量指针用 (*p) 来访问指针指向的变量,如 (const int v2 = *p; ) 或者 (*p = 200;)
用户自定义类型(如struct ,class)使用 (p->) 来访问对象
(this->) 是对象内置指针,用来访问对象 (如 class 类) 本身
- // 普通指针变量
- int * p = new int{0};
- delete p;
- // 指针数组
- int * parray = new int[10];
- delete[] parray;
-
- void* p1{nullptr}; // 无类型指针
- int v = 100;
- int * p2 = &v; // 指向整数的指针
- *p2 = 200; // v 的值会跟着改变
- double f = 1.34;
- double * p3 = &f; // 指向浮点数的指针
- *p3 = 2.68; // f 的值会跟着改变
-
- class MyInfo {
- public:
- void set_data(int v) {
- this->m_value = v; // this->指针
- }
- int get_data() const {return this->m_value;}
- public:
- int m_value{0};
- };
- MyInfo * info1 = new MyInfo();
- info1->a = 100; // 用 (p->) 访问对象成员变量
- info1->set_data(100);
- delete info1;
- 需要清楚知道不同变量类型对应的取值范围(最大、最小数),如 int 的取值范围是 -2147483648 到 2147483647,而 unsigned int 的取值范围是 0 到 4294967295;
- 业务场景选择合适的变量类型;比如需要计算很大的整数,需用到64位的 long long 长整数,明确没有负数的用 unsigned 等等;
- 养成变量定义就地初始化变量值的习惯,如下例子:
- void * nameAddress{nullptr}; // 推荐
- bool isAllowed{true}; // 推荐
- int minNumber{0}; // 推荐
- int minNumber; // 不推荐
- 练习1:设计一个用户信息数据类(class UserInfo),想象下一个用户信息数据类至少会包含哪些字段?如用户名称、年龄、性别等;然后选择适合的类型定义成员变量;
- 练习2:随机生成50个用户模拟数据并打印到屏幕上;
进入视频号学习本文配套视频课程。
-【End】-
哈喽,大家好!我是喜欢coding的小二,一枚“靓仔又不掉头发”的C++开发大头兵;欢迎围观公众号(20YC编程),定期会分享一些技术开发经验、行业资讯、业界动态等。期待您的关注,一起交流学习进步。
#下载示例源码和开发工具,请进入公众号首页,点击(发消息)最下方的(资源下载)菜单即可获取。
喜欢本文章,记得点赞、分享、关注哦~