【C++程序员必修第一课】C++基础课程-04:变量、常量和指针

1 本课主要内容:

  • 变量及变量类型
  • 变量作用域(变量生命周期):全局作用域、类作用域、块作用域、局部作用域
  • 常量和引用
  • 指针

2 主要知识点:

  • 变量是什么?

变量就是程序中用于存储数据的一个名称,通过变量来表示不同的对象,比如有用户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;     // 十六进制
  • (const) 常量

常量是指固定不能修改的值;

// 如下例子: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 的值也跟着改变
  • (const type&) 常量引用(只读不能写)

/***************************************************************
* 常量引用示例:
* 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; 

3 一些建议:

  • 需要清楚知道不同变量类型对应的取值范围(最大、最小数),如 int 的取值范围是 -2147483648 到 2147483647,而 unsigned int 的取值范围是 0 到 4294967295;
  • 业务场景选择合适的变量类型;比如需要计算很大的整数,需用到64位的 long long 长整数,明确没有负数的用 unsigned 等等;
  • 养成变量定义就地初始化变量值的习惯,如下例子:
void * nameAddress{nullptr};    // 推荐
bool isAllowed{true};           // 推荐
int minNumber{0};               // 推荐
int minNumber;                  // 不推荐

4 课后练习:

  • 练习1:设计一个用户信息数据类(class UserInfo),想象下一个用户信息数据类至少会包含哪些字段?如用户名称、年龄、性别等;然后选择适合的类型定义成员变量;
  • 练习2:随机生成50个用户模拟数据并打印到屏幕上;

附录:在线视频课程

【C++程序员必修第一课】C++基础课程

你可能感兴趣的:(c++,C++指针,C++基础课程,C++变量,C++常量,C++引用,C++课程)