const 类型

1、const的普通用法

const int n = 10;

意思很明显,n是一个只读变量,程序不可以直接修改其值。这里还有一个问题需要注意,即如下使用:int a[n];在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而n只是一个变量。

 

2、const用于指针

const int *p;

int const *p;

int * const p;

在最后的一种情况下,指针是只读的(即p只读),而在另外两种情况下,指针所指向的对象是只读的(即*p只读)。const 是一个左结合的类型修饰符,它与其左侧的类型修饰符一起为一个类型修饰符,所以,int const 限定 *p,不限定p。int *const 限定p,不限定*p。const 离谁近,就限定谁。

 

这里有一个简便的区分方法:沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

 

3、const用于函数的地址传递参数

void foo(const int *p);

这种形式通常用于在数组形式的参数中模拟传值调用。也就是相当于函数调用者声称:"我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,那么就相当于模拟了值传递。这也是const最有用之处了:用来限定函数的形参,这样该函数将不会修改实参指针所指的数据。这里注意了,是函数不应该去修改而不是不能修改,也就是说const不能阻止参数的修改(原因见上)。

 

4、const用于限定函数的返回值

const int foo();

const struct mytype foo(); 

上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时,这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。


### CONST 类型指针的定义和用法 在 C/C++ 中,`const` 类型指针是一种特殊的指针形式,它通过 `const` 关键字来限定指针本身或其指向的内容是否可以被修改。这种机制增强了程序的安全性和可维护性。 #### 1. 基本概念 `const` 类型指针可以通过两种方式应用: - **限制指针所指向的对象不可变**:即指针指向的内容不能被修改。 - **限制指针本身的值不可变**:即指针不能再指向其他地址。 这两种情况的具体实现如下: #### 2. 指向常量的指针 当声明一个指向常量的指针时,意味着该指针指向的内容是只读的,无法通过此指针修改原始数据。语法格式为: ```c++ const 数据类型* 指针名; ``` 例如: ```cpp int value = 10; const int* ptr = &value; // 下面这行会报错,因为 *ptr 是只读的 *ptr = 20; // 错误 [^1] // 但是可以通过原来的变量修改值 value = 20; // 正确 ``` 这里需要注意的是,虽然 `*ptr` 不允许直接修改其所指向的数据,但如果原变量未标记为 `const`,则仍可通过原变量间接改变数值[^4]。 #### 3. 指针本身为常量 另一种常见的情况是指针本身是一个常量,也就是说一旦初始化完成之后就不能再更改它的目标地址。此时应将 `const` 放置在星号后面的位置上。语法格式为: ```c++ 数据类型* const 指针名; ``` 实例演示: ```cpp int x = 5, y = 10; int* const ptr = &x; // 尝试重新赋值给另一个地址将会失败 ptr = &y; // 编译错误 ``` 上述例子表明了一旦设置了固定的内存位置绑定关系后就不得随意变更关联对象了。 #### 4. 同时指定两者均为常数 还可以创建既保护内容又固定存储单元定位的一类特殊指针——双层恒定结构体。具体写法如下所示: ```c++ const 数据类型* const 指针名称; ``` 这样的设定下不仅阻止了经由当前句柄去篡改实际资料的行为发生;同时也杜绝了切换链接至别的实体的可能性存在。 示例代码片段: ```cpp int fixedValue = 789; const int* const doubleConstPtr = &fixedValue; doubleConstPtr = nullptr; // Error: Cannot modify pointer itself. *doubleConstPtr = 654; // Error: Cannot modify the content it points to. ``` 以上就是关于如何利用 `const` 来增强指针功能的一些基础知识介绍及其典型应用场景分析[^2][^3]. ### 总结 综上所述,在C/C++编程过程中合理运用带有 `const` 属性的各种形式的指针能够有效提升软件系统的健壮程度并减少潜在风险隐患的发生概率。同时也能让我们的源码显得更为清晰易懂便于后期维护工作开展顺利进行下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值