逆向基础--C++ 作用域、常量、修饰符类型 (03)

一. 作用域介绍

  局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁

  全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。 

  块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁

  类作用域:在类内部声明的变量具有类作用域,它们可以被类的所有成员函数访问。类作用域变量的生命周期与类的生命周期相同

  注意:如果在内部作用域中声明的变量与外部作用域中的变量同名,则内部作用域中的变量将覆盖外部作用域中的变量。在C#中会编译出错,但C++中不会,如下代码所示:

class MyClass
{
public:
    int Total = 10;

    void tempFunc() {

        int Total = 100;
        //最终输出100
        std::cout << "Total:" << Total;
    }
};

  1.1 局部作用域 ---在函数内部声明的变量具有局部作用域,它们只能在函数内部访问

int main ()
{
  // 局部变量声明
  int a, b;
  int c;
 
  // 实际初始化
  a = 10;
  b = 20;
  c = a + b;
 
  cout << c;
}

  1.2 全局变量---通常是在程序的头部,函数和代码块之外声明的变量具有全局作用域

// 全局变量声明
int g;
 
int main ()
{
  // 局部变量声明
  int a, b;
  // 实际初始化
  a = 10;
  b = 20;
  g = a + b;
  cout << g;
}

  1.3 块作用域--只能在代码块内部访问

  if (a == 10) {
        short  c = 20;  //块作用域
    }

  1.4 类作用域

// MyClass要放在上面,注意类定义顺序问题
class MyClass {
    public: 
         static std::string UserName;//声明 并不分配存储空间
         /*
           inline 声明即定义,从 C++17 开始引入的特性
           有这个特性Address就不需要静态成员类外定义,与C#、java写法类似
         */ 
        inline static std::string Address = "湖南长沙";
};

//静态成员需要类外定义
std::string MyClass::UserName="张三"; //定义,分配存储空间
int main()
{
    std::cout << MyClass::UserName+"\n";
    std::cout << MyClass::Address;
}

 

二.常量

  常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

  2.1 整数常量

    整数常量可以是十进制、八进制或十六进制的常量。前缀指定:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

    整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),

    L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。

//以下是各种类型的整数常量的实例
85         // 十进制
0213       // 八进制 
0x4b       // 十六进制 
30         // 整数 
30u        // 无符号整数 
30l        // 长整数 
30ul       // 无符号长整数

  2.2 浮点常量

    浮点常量由整数部分、小数点、小数部分和指数部分组成。可以使用小数形式或者指数形式来表示浮点常量。

    当使用小数形式表示时,必须包含整数部分  或  小数部分,或同时包含两者。

    当使用指数形式表示时, 必须包含小数点  或   指数   或同时包含两者。带符号的指数是用 e 或 E 引入的。

    后缀 'f' 或 'F' 表示 float 类型

//下面列举几个浮点常量的实例 
3.14159       // 合法的 
314159E-5L    // 合法的,指数部分是E-5表示乘以10的-5次方  ==314159 * 10^(-5),L表示长整数
.5               // 合法的 
5.               // 合法的 
.5e-5          // 合法的    0.5乘以10的-5次方
5.e0            // 合法的   5乘以10的0次方

510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

  2.3 定义常量

    在 C++ 中,有两种简单的定义常量的方式:1)使用 #define 预处理器; 2)使用 const 关键字

    在C++中,推荐使用const代替#define来定义常量,因为const提供了类型安全和作用域。

    请注意,把常量定义为大写字母形式。

#include <iostream>
using namespace std;
int main()
{
   const int  LENGTH = 10;
   const int  WIDTH  = 5;
   const char NEWLINE = '\n';
   int area;  
   
   area = LENGTH * WIDTH;
   cout << area;
   cout << NEWLINE;
}

 

 三. 修改符类型

  C++ 允许在 char、int 和 double 数据类型前放置修饰符。下面表格列出了数据类型修饰符

数据类型 描述
signed --有符号类型 表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型
unsigned --无符号类型 表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。
short 表示变量的范围比 int 更小。 short int 可以缩写为 short。如 short int  x=1000, 或简写short x=1000
long

表示变量的范围比 int 更大。long int 可以缩写为 longt。如 long int  x=100000000,

或简写long x=100000000

long long 示变量的范围比 long 更大。C++11 中新增的数据类型修饰符
float 表示单精度浮点数
double 表示双精度浮点数
bool 表示布尔类型,只有 true 和 false 两个值
char 表示字符类型
wchar_t 表示宽字符类型,可以存储 Unicode 字符

  下面是变量声明定义的示例    

signed int num1 = -10; // 定义有符号整型变量 num1,初始值为 -10
unsigned int num2 = 20; // 定义无符号整型变量 num2,初始值为 20

short int num1 = 10; // 定义短整型变量 num1,初始值为 10
long int num2 = 100000; // 定义长整型变量 num2,初始值为 100000

long long int num1 = 10000000000; // 定义长长整型变量 num1,初始值为 10000000000

float num1 = 3.14f; // 定义单精度浮点数变量 num1,初始值为 3.14
double num2 = 2.71828; // 定义双精度浮点数变量 num2,初始值为 2.71828

bool flag = true; // 定义布尔类型变量 flag,初始值为 true

char ch1 = 'a'; // 定义字符类型变量 ch1,初始值为 'a'
wchar_t ch2 = L''; // 定义宽字符类型变量 ch2,初始值为 '你'

 

posted on 2025-11-10 11:05  花阴偷移  阅读(0)  评论(0)    收藏  举报

导航