【C++学习日志】const常量关键字

普通常量定义

const type variable = value;

注意:在定义常量(非类成员常量)时,必须要在定义该常量时对其进行初始化。

const int buffer = 256;			// 正确
const int temp;					// 错误

常量指针与指针常量

常量指针:指针所指向内存的值不可修改,指针所指向的地址可以修改;

int a=10;
int b=20;
const int *p=&a;  	//定义指针常量,指向int a的地址
					// const int *p; p=&a; 也是正确的;
p = &b;  			//正确,指向的内存地址可以修改
int a=10;
const int *p =&a;  	//定义指针常量,指向int a的地址
*p = 20; 			//错误,指向的内存地址中的数据不可以修改    

常量指针通常用于以下场景:

  1. 读取数组、字符串等数据集合,确保这些数据不会被意外修改。
  2. 在函数参数中,防止函数修改传入的数据。
  3. 增加代码的可靠性,避免意外修改指针所指向的数据。

常量指针应用于函数中的案例:

#include <iostream>

// 函数声明,接受一个指向常量 double 类型的指针
void printArray(const double *arr, int size);

int main() {
    double array[] = {1.1, 2.2, 3.3, 4.4, 5.5};

    // 调用函数并传递数组的地址
    printArray(array, 5);

    return 0;
}

// 函数定义,输出数组中的元素值
void printArray(const double *arr, int size) {
    std::cout << "数组中的元素值为:" << std::endl;
    for (int i = 0; i < size; ++i) {
        std::cout << arr[i] << std::endl;
    }
}

注意:
在C++中,数组名可以被隐式转换为指向数组首元素的指针。所以在函数 printArray 中,参数 arr 虽然被声明为指向常量 double 类型的指针,但由于数组名 array 在传递给函数时被转换为指向数组首元素的指针,因此在函数内部可以像访问普通数组一样使用 arr[i] 来访问数组中的元素。这种隐式转换在 C++ 中经常被使用,它允许函数接受数组作为参数,而无需明确指定数组的大小。

指针常量:指针所指向的地址不可修改,指针所指向内存的值可以修改;

int a=10;
int * const p =&a;  //定义指针常量,指向int a的地址

*p = 20; //正确,指向的内存地址中的数据可以修改   
int a=10;
int b=20;
int * const p =&a;  //定义指针常量,指向int a的地址

p = &b;  //错误,指向的内存地址不可以修改

注意:
指针常量p不是外部的,必须要在声明时初始化指针常量。

指针常量适用于以下场景:

  1. 需要保持指针指向固定位置,但可能需要修改该位置数据的情况。
  2. 减少内存泄漏和野指针的风险。

总结:
常量指针用于保护数据不被修改,而指针常量用于保持指针指向固定位置。

参考:
【C/C++】 常量指针,指针常量、指向常量的常指针详解
C++ 中常量引用、指向常量的指针、常量指针的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值