C++ 八股文系列之一 (C++基础)

C++基础

指针和引用的区别

指针存放某个对象的地址,其本身就是变量,本身就有地址,所以可以有指向指针的指针;
可变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。
引用就是变量的别名,从一而终,不可变,必须初始化
不存在指向空值的引用,但是存在指向空值的指针

  1. 定义和声明
    指针是一个变量,其值是另一个变量的地址。声明指针时,使用*符号
int a = 10;
int *ptr = &a;

引用是一个别名,它是在已存在的变量上创建的。在声明引用时,使用&符号

int b = 10;
int &ref = b;
  1. 使用和操作
    指针: 可以通过解引用操作符*来访问指针指向的变量的值,还可以通过地址运算符&获取变量的地址。
    引用: 引用在声明时被初始化,并在整个生命周期中一直引用同一个变量。不需要使用解引用操作符,因为引用本身就是变量的别名
int val = *ptr;	//获取指针指向的值
int address = &a;	//获取变量a的地址
int newValue = ref; //获取引用的值
  1. 空值和空引用
    指针可以为空(nullptr)表示不指向任何有效的地址。
    引用必须在声明时初始化,并且不能再后续改变已用的绑定对象。因此,没有空引用的概念
  2. 可变性
    指针: 可以改变指针的指向,使其指向不同的内存地址。
    引用: 一旦引用被初始化,它将一直引用同一个对象,不能改变绑定。
  3. 用途
    指针: 通常用于动态内存分配、数组操作以及函数参数传递。
    引用: 通常用于函数参数传递、操作符重载以及创建别名。

数据类型

整型 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判断数据类型的长度。
头文件climits定义了符号常量。例如:INT_MAX表示int的最大值,INT_MIN表示int的最小值。

无符号类型

无符号类型即为不存储负数值的整型,可以增大变量能够存储的最大值,数据长度不变。
int被设置为自然长度,即为计算机处理起来效率最高的长度,所以选择类型时一般选用int类型。

关键字

const关键字

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

  1. 常量指针(底层const)
    常量指针是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值。常量指针强调的是指针对其所指对象的不可改变性。
    特点:靠近变量名。
    形式:
    1. const 数据类型* 指针变量 = 变量名
    2. 数据类型 const *指针变量 = 变量名
      示例:
int temp = 10;
const int* a = &temp;
int const *a = &temp;
//更改
*a = 9; //错误,只读对象
temp = 9; //正确
  1. 指针常量(顶层const)
    指针常量是指定义了一个指针,这个指针的值只能在定义时初始化,其他地方不能改变。指针常量强调的是指针的不可改变性。
    特点:靠近变量类型
    形式:数据类型* const 指针变量 = 变量名
    示例:
int temp = 10;
int temp1 = 12;
int* const p = &temp;
//更改
p = &temp2; //错误
*p = 9; //正确

static关键字的作用

static关键字主要用于控制变量和函数的生命周期、作用域以及访问权限。
3. 静态变量
- 在函数内部使用static关键字修饰的变量称为静态变量。
- 静态变量在程序的整个生命周期内存在,不会因为离开作用域而被销毁。
- 静态变量默认初始化为零(对于基本数据类型)。

void exampleFunction(){
   
	static int count = 0;	//静态变量
	count++;
	cout <<"Count:"<< count << endl;
}
  1. 静态函数
    • 在类内部使用static关键字修饰的函数是静态函数。
    • 静态函数属于类而不是类的实例,可以通过类名直接调用,而无需创建对象。
    • 静态函数不能直接访问非静态成员变量或非静态成员函数。
class ExampleClass{
   
public:
	static void staticFunction(){
   
		cout << "Static function" << endl;
	}
};
  1. 静态成员变量
    • 在类中使用static关键字修饰的成员变量是静态成员变量。
    • 所有 类的对象 共享同一个静态成员变量的副本。
    • 静态成员变量 必须在类外部单独定义,以便为其分配存储空间。
class ExampleClass{
   
public<
  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值