C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给 const 类型的形参,这样做从未引发任何副作用,原因就是上面讲到的,将非 const 类型转换为 const 类型是允许的。 下面是一个将 const 类型赋值给非 const 类型的例子: #include <stdio...
下面是一个将 const 类型赋值给非 const 类型的例子: 第7、8行代码分别通过赋值、传参(传参的本质也是赋值)将 const 类型的数据交给了非 const 类型的变量,编译器不会容忍这种行为,会给出警告,甚至直接报错。
根据strnchr() 的功能可以推断,函数内部要对字符串 str 进行遍历,不应该有修改的动作,用 const 加以限制,不但可以防止由于程序员误操作引起的字符串修改,还可以给用户一个提示,函数不会修改你提供的字符串,请你放心。 const 和非 const 类型转换 当一个指针变量 str1 被 const 限制时,并且类似const char *st...
当const与指针一同出现时,位于*左边的const使得数据成为常量,位于*const右边的const使得指针自身成为常量。更直白点来说就是:修饰谁,谁的内容就不可变,其余的都可变。 二、const与全局变量 由于程序的任何部分都可以修改全局变量的之,因此使用全局变量是一种很冒险的写法。但当我们用上了const后,这个问题就解决了。
const 和非 const 类型转换 当一个指针变量 str1 被 const 限制时,并且类似const char *str1这种形式,说明指针指向的数据不能被修改;如果将 str1 赋值给另外一个未被 const 修饰的指针变量 str2,就有可能发生危险。因为通过 str1 不能修改数据,而赋值后通过 str2 能够修改数据了,意义发生了转变,所以编译器...
但是当我们非要对该常量去地址时,则编译器会为其临时分配一个内存,并将常量值存入该临时内存中,事实上,在C++中规定必须用const修饰的指针来指向const修饰的常量。虽然可以使用强制转换的方式,对Const修饰的常量进行去地址,并将其赋值给一个非Const修饰的指针(最好不要这样做),但打这个指针上的任何改动都只会影响...
const int version = 1;在这个例子中,version 被声明为一个全局常量,其值不能被修改。6. 通过指针修改非 const 变量 int x = 10;const int *ptr = &x;虽然 ptr 指向的是一个 const int 类型的变量,但是通过其他指针可以修改 x 的值,因为 x 本身不是常量。7. const 的多重修饰 const int *const...
const 关键字也可以用于指针和引用,从而创建指向常量对象的指针或引用。这意味着指针或引用指向的值不能被修改。例如: Plain Text 复制代码 9 1 2 3 4 const int* ptr=12; // 指向常量的指针,即const数据,非const指针 int const* ptr=12; // 与上一行相同,指向常量的指针 int* const ptr=12; /...
在C/C++中,常见 const 用法有以下几种: 一、const 变量 const 变量指的是,此变量的值是只读的,不应该被改变。 如果我们在程序中试图修改const 变量的值,在编译的时候,编译器将给出错误提示。 正因为 const 变量的值在给定以后不能改变,所以const 变量必须被初始化。(如果不初始化,之后还怎么赋值呢?)如果我们...
const 定义的常量 是赋初值的 不赋初值 就没法给值了 因为const 常量 放在系统常量区 那里的内存是只读的 除非强制转换为非const类型 否者无法修改其内容