趣记八股文Part1—-C++基础

今天开始学八股,作为抽象派速记代言人,面对要死记硬背的东西,一定要让它变得有趣才是我能够记得下去的王道!

指针与引用的区别

先来看一下八股文的定义:

如果理解起来有点困难的话,可以这样去想,指针是一个粉丝,他喜欢一个idol,就算是他指向那个idol,但是粉丝自身也可以是一个idol,也可以被另一个人喜欢,所以可以有喜欢粉丝的粉丝。粉丝是可以变化的,粉丝喜欢的那个idol可能会塌房,粉丝可以脱粉,换idol追,这就是说明粉丝是可变的。

而引用相当于是替身,是idol的替身,要先有idol,才有替身,而替身永远都是idol的替身,哪怕他塌房了,替身也永远是他的替身。

不存在一个替身演员没有对应的idol,但是存在一个粉丝他谁都不追的情况。

这样理解起来是不是立马就顺畅起来了,代码八卦圈的小故事,就是指针与引用

定义和声明

指针是⼀个变量,其值是另⼀个变量的地址。声明指针时,使⽤ * 符号。(追星是这样的)

int x = 10;
int *ptr = &x;

引用是一个别名,它是在已存在的变量上创建的,在声明引用时,使用&符号(替身要跟着主演)

int y = 20;
int &ref = y;

使用和操作

指针:可以通过解引用操作符 * 来访问指针指向的变量的值,还可以通过地址运算符 & 获取变量的地址。(要看我偶像,追个星就看到了,要看他地址,得像狗崽队一样跟随才可以)

引用在声明时被初始化,并在整个生命周期中一直引用同一个变量,不需要任何解引用操作符,因为引用本身就是变量的别名(替身)

int value = *ptr; // 获取指针指向的值
int address = &x; // 获取变量 x 的地址
int newValue = ref; // 获取引用的值

空值和空引用

指针可以为空(nullptr)表示不指向任何有效的地址。

引用必须在声明时初始化,并且不能在后续改变引⽤的绑定对象。因此,没有空引用的概念

可变性

指针: 可以改变指针的指向,使其指向不同的内存地址。

引用: ⼀旦引用被初始化,它将⼀直引用同⼀个对象,不能改变绑定。

指针: 通常用于动态内存分配、数组操作以及函数参数传递。

引⽤: 通常用于函数参数传递、操作符重载以及创建别名。

数据类型

整型 short int long 和 long long

C++ 整型数据长度标准

short 至少 16 位

int 至少与 short ⼀样⻓

long 至少 32 位,且至少与 int ⼀样⻓

long long 至少 64 位,且至少与 long ⼀样⻓

在使⽤8位字节的系统中,1 byte = 8 bit

很多系统都使用最小长度,short 为 16 位即 2 个字节,long 为 32 位即 4 个字节,long long 为 64 位即 8 个字节,int 的长度较为灵活,⼀般认为 int 的长度为 4 个字节,与 long 等长。

可以通过运算符 sizeof 判断数据类型的⻓度。例如:

cout << "int is " << sizeof (int) << " bytes. \n";
cout << "short is " << sizeof (short) << " bytes. \n";

头⽂件climits定义了符号常量:例如:INT_MAX 表示 int 的最⼤值,INT_MIN 表示 int 的最⼩值。

这种死记硬背的我也啥办法,只好死记硬背。

short : 16 bit 2 byte
int : 32 bit 4 byte
long:32 bit 4 byte
long long:63 bit 8 byte

无符号类型

即为不存储负数值的整型,可以增大变量能够存储的最大值,数据长度不变。

int 被设置为⾃然⻓度,即为计算机处理起来效率最⾼的⻓度,所以选择类型时⼀般选⽤ int 类型。

关键字

const 关键字

const的作用:被它修饰的值不能改变,是只读变量。必须在定义的时候就给它赋初值。

常量指针(底层const)

常量指针:是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值,常量指针强调的是指针对其所指对象的不可改变性。说人话就是指针是正常指针,指针指向的对象是常量。

特点:定义的时候 * 靠近变量名,因为是常量指针,所以定义的时候先定义常量再定义指针,比如先写int const或const int再写*

形式:

(1)const 数据类型 *指针变量 = 变量名

(2)数据类型 const *指针变量 = 变量名

int temp = 10;
const int* a = &temp;
int const *a = &temp;
// 更改:
*a = 9; // 错误:只读对象
temp = 9; // 正确

指针常量(顶层const)

指针常量是指定义了⼀个指针,这个指针的值只能在定义时初始化,其他地方不能改变。指针常量强调的是指针的不可改变性。人话就是指针是常量,永远指向一个地方无法改变

特点:定义的时候 * 靠近变量类型。指针常量,先定义指针,再定义常量。

形式:

数据类型 * const 指针变量=变量名

int temp = 10;
int temp1 = 12;
int* const p = &temp;
// 更改:
p = &temp2; // 错误
*p = 9; // 正确

static关键字的作用

前面写太多了,有点慢,看看能不能提速一下,后面会更精简!但是质量依旧在线!

static的意思是静态的,静止的,主要用于控制变量和函数的生命周期,作用域以及访问权限

接下来的内容先一个一个看完,整体理解会更好!

静态变量

  • 在函数内部使用static关键字修饰的变量称为静态变量。
  • 静态变量在程序的整个生命周期内存在,不会因为离开作用域而被销毁(这个变量的时间静止了,所以无法销毁,时间宝石的力量
  • 静态变量默认初始化为零(对于基本数据类型)
void exampleFunction() {
 static int count = 0; // 静态变量
 count++;
 cout << "Count: " << count << endl;
}

静态函数

  • 在类内部使用static关键字修饰的函数时静态函数。
  • 静态函数属于类而不是类的实例,可以通过类名直接调用,而无需创建对象。
  • 静态函数不能访问非静态成员或非静态成员函数。(静止的只能和静止的玩
class ExampleClass {
public:
 static void staticFunction() {
 cout << "Static function" << endl;
 }
};

静态成员变量

  • 在类中使用static关键字修饰的成员变量是静态成员变量
  • 所有类的对象共享同一个静态成员变量的副本
  • 静态成员变量必须在类外部单独定义,以便为其分配存储空间
class ExampleClass {
public:
 static int staticVar; // 静态成员变ᰁ声明
};
// 静态成员变ᰁ定义
int ExampleClass::staticVar = 0;

静态成员函数

和上面静态函数一样

静态局部变量

和上面的静态变量一样

Const关键字的作用

const关键字主要用于指定变量、指针、引用、成员函数等的性质

  • 1. 常量变量:声明常量,使变量的值不能被修改。
  • 2. 指针和引用:声明指向常量的指针,表示指针所指向的值是常量,不能通过指针修改。声明常量引用,表示引用的值是常量,不能通过引用修改。
const int* ptr = &constantValue; //指向常量的指针
const int& ref = constantValue; //常量引用
  • 3. 成员函数:用于声明常量成员函数,表示该函数不会修改对象的成员变量(对于成员变量是非静态的情况)。
  • 4. 常量对象:声明对象为常量,使得对象的成员变量不能被修改。
  • 5. 常引用参数:声明函数参数为常量引用,表示函数不会修改传入的参数。
  • 6. 常量指针参数:声明函数参数为指向常量的指针,表示函数不会通过指针修改传入的数据。(指针常量?)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇