file-type

C++中const关键字用法详解:const int *a与int * const a的区别

DOC文件

5星 · 超过95%的资源 | 下载需积分: 50 | 46KB | 更新于2024-09-19 | 175 浏览量 | 4 下载量 举报 收藏
download 立即下载
"这篇资源主要讨论了C++中`const`关键字的不同用法,特别是`const int *a`和`int * const a`这两种声明方式的区别,并通过实例进行了阐述。文章还介绍了`const`修饰变量和指针的各种情况,包括基本类型的`const`声明、指针的`const`修饰以及`const`指针的使用规则。" 在C++编程中,`const`关键字用于声明常量或使变量不可修改。以下是对`const`关键字在不同情况下的应用详解: 1. `const char *pCh`:这里的`const`修饰的是`char`,表示`pCh`是一个指向字符串常量的指针。这意味着`pCh`可以改变指向其他字符串常量,但不能改变所指向的字符串内容。 2. `char *const pCh`:`const`修饰的是`pCh`这个指针,表示`pCh`是一个指向字符串的常量指针,即`pCh`一旦初始化后就不能再改变指向,但字符串内容可以修改。 3. `const int a` 和 `int const a`:这两者等价,表示`a`是一个整型常量,其值不能被修改。 4. `const int *a`:`const`修饰的是`int`,意味着`a`是一个指向整型常量的指针,可以改变指针`a`指向其他整型常量,但不能通过`a`修改所指向的整型常量的值。 5. `int *const a`:`const`修饰的是`a`,即`a`是一个指向整型数的常量指针,不能改变`a`的指向,但可以通过`a`修改所指向的整型数的值。 6. `int const *a const`:`const`同时修饰了`int`和`a`,表示`a`是一个指向整型常量的常量指针,既不能改变`a`的指向,也不能通过`a`修改所指向的整型常量的值。 在声明`const`变量时,需要注意: - `const int r=100;` 是标准的`const`变量声明并初始化,其作用域为当前文件,且必须初始化。 - `extend const int r=100;` 将`const`改为外部链接,使得`r`的作用域扩大到全局,可以不初始化。 - `const int r[] = {...};` 和 `const S s[] = {...};` 都是常量集合,它们在编译时会被分配内存,因此不能在编译期间使用它们的大小作为数组长度等常量表达式。 对于指针的`const`修饰,关键在于理解`const`修饰的是指针还是指针所指向的对象。`const`在前(如`const int *a`)时,修饰的是指针所指向的对象,而在后(如`int * const a`)时,修饰的是指针本身。理解这一点有助于正确使用`const`指针,避免不必要的错误。例如,`const int *a`可以改变`a`的指向,但不能通过`a`改变所指向的整型数的值,而`int * const a`则不能改变`a`的指向,但可以改变`a`所指向的整型数的值。

相关推荐

filetype

uf5947 (查看源代码) 定义在:uf_trns.h 概述 根据先前定义的矩阵变换对象。应 通过调用uf5942-uf5946来定义矩阵 。 要转换的对象数量的上限是32767. 非均匀缩放支持的对象类型与 交互式NX 中非均匀缩放支持的对象 类型相同 。 返回 空虚 环境 内部外部 需要许可证(S) 网关(UG入口基本模块,网关是所有其它Uuigraphics模块的一个必要条件) void uf5947 ( const double rp1 [16], const tag_t objects [], const int * n_objects, const int * move_or_copy, const int * dest_layer, const int * trace_curves, tag_t * copies, tag_t * trace_curve_group, int * status ) const double rp1 [16] 输入(输入) 定义转换矩阵。这必须是 16个元素的数组。应 使用函数uf5942-uf5946初始化此数组 以生成所需的转换。 const tag_t 对象[] 输入(输入) 对象标识符数组。 const int * n_objects 输入(输入) 对象数组中的对象数。 const int * move_or_copy 输入(输入) 移动/复制状态 1 - 移动 2 - 复制。 const int * dest_layer 输入(输入) 目标图层, 0 - 原始图层, -1 - 工作图层 1 - 256 - 指定图层 const int * trace_curves 输入(输入) 跟踪曲线状态,1表示打开,2表示关闭。 tag_t *(tag_t型的指针) 副本 输出(输出) 复制的对象标识符列表。 当move_or_copy等于1(移动)时,不使用此方法。 当move_or_copy为2(复制)时, 调用者必须将其标注为足够大,以包含 对象数组中相同数量的对象。 tag_t *(tag_t型的指针) trace_curve_group 输出(输出) 一组曲线。当 trace_curves输入设置为2(关闭)时,不使用此选项。 int *(整数型指针) 状态 输出(输出) 状态代码 0 - 成功 1 - 太多或太少实体 转换 2 - 无效参数 3 - 无效对象(不活动或不可 转换) 4 - 剪切矩阵与 列表中的不可剪切对象 5 - 建模更新错误 6 - 错误将建模数据添加到复制实体 7 - 无法缩放参数实体 8 - 变换不适合对象 9 - 无法缩放已开发的曲线 10 - 无法镜像实体 11 - 无法变换出现 12 - 无法变换草图或草图曲线

w349292899
  • 粉丝: 4
上传资源 快速赚钱