指针与const限定符

const限定符和指针结合起来常见的情况:

const int *a;

int const *a;

这两种写法是一样的, a是一个指向const int型的指针, a所指向的内存单元不可改写, 所以(*a)++是不允许的, a可以改写, 所以a++是允许的.

intconst a;

a是一个指向int型的const指针*a可以改写的,
a不允许改写.

 

int const*
const a;

a是一个指向const int型的const指针, 因此*aa都不允许改写.

指向非const变量的指针或者非const变量的地址可以传给指向const变量的指针, 编译器可以做隐式类型转换, 例如:

char c= 'a';

const char *pc=&c;

但是,
指向const变量的指针或者const变量的地址不可以传给指向非const变量的指针, 以免透过后者意外改写了前者所指向的内存单元, 例如对下面的代码编译器会报警告:

const char c=
'a';

char *pc=&c;

 

时间: 2024-09-15 11:53:11

指针与const限定符的相关文章

c++-const限定符问题.

问题描述 const限定符问题. 3C #ifdef aconst b = a;#elseconst int b=1;#endif这段代码无法通过编译么 解决方案 我编译没有错误,应该和编译器有关,请问编译器告诉你是什么错误? 解决方案二: c++-const限定符const限定符c++ const 限定符 解决方案三: 第二句有错,缺少参数类型

const限定符

有时我们希望定义这样一种变量,它的值不能被改变.例如,用一个变量来表示缓冲区的大小.使用变量的好处是当我们觉得缓冲区大小不再合适时,很容易对其进行调整.另一方面,也应随时警惕防止程序一不小心改变了这个值.为了满足这一要求,可以用关键字const对变量的类型加以限定: const int buffsize=512://输入缓冲区的大小 这样就把buffsize定义成了一个常量.任何试图为buffsize赋值的行为都将引发错误: buffsize=512: //错误:试图向const对象写值 因为c

(三十六)让常量只读——const限定符

有时候,我们会让一个常量全程保持不变,并且避免让他因为某些操作而变化,这个时候,我们就需要禁止常量被修改.   例如:我们int day=30; 这个时候,我们只需要这个变量day的数值为30,不需要他变化,这个时候,day实际上就是一个常量了,他的数值为30. 于是呢,我们可以这么做,比如说const int day=30; 为了区分常量和变量,我们可以这样做,比如将常量day的首字母大写变成Day,又或者全部大写变成DAY,也可以前面加个k变成kday,或者其他各种方法.总之,目的是为了方便

C++中的const限定修饰符

const修饰符可以把对象转变成常数对象,什么意思呢? 意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! 使用方法是: const int a=1;//这里定义了一个int类型的const常数变量a; 但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆! 我们来看一个如下的例子: #include <iostream>using namespace std;void main(void){const int

C++ 中const 类型限定符不兼容问题_C 语言

今天在写程序的时候,出现了一个错误  "对象包含与成员函数不兼容的类型限定符",从网上查了一下,原来原因是这样子的 void showPair(); 改成 void showPair()const; 在具有 如上图所示的函数中,如果调用了其它函数,那么其它函数也必须有 const 属性,否则就会出现 类型限定符不兼容的错误! 以上所述就是本文的全部内容了,希望大家能够喜欢.

volatile限定符{C}

PS: ...Newbie love coding-  Linux_c一站式编程(volatile限定符介绍) linux_c的volatile限定符 现在探讨一下编译器优化会对生成的指令产生什么影响,在此基础上介绍C语言的volatile限定符.看下面的例子: 我们用recv和send这两个全局变量来模拟设备寄存器.假设某种平台采用内存映射I/O,串口发送寄存器和串口接收寄存器位于固定的内存地址,而recv和send这两个全局变量也有固定的内存地址,所以在这个例子中把它们假想成串口接收寄存器和

printf-求问:C语言 格式限定符类型的问题

问题描述 求问:C语言 格式限定符类型的问题 有时不小心错用了格式限定符,例如: int x; scanf("%f", &x); <----- 应该用%d printf("%g", x); <----- 应该用%d 而编译程序却编译通过了,没有发现错误,为什么? 解决方案 c语言中有强转这个东西,从这个角度也可以理解,c语言功能之所以强大,是因为限制很少,说白了,什么类型在内存中都是连续的01而已 解决方案二: 编译器不会检查这些的.这很正常.好

限定符

  有时候不知道要匹配多少字符.为了能适应这种不确定性,正则表达式支持限定符的概念.这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配. 下表给出了各种限定符及其含义的说明: 字符 描述 * 匹配前面的子表达式零次或多次.例如,zo* 能匹配 "z" 以及 "zoo". * 等价于{0,}. + 匹配前面的子表达式一次或多次.例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z&

《叩响C#之门》正则表达式(二)数量限定符

第 20章 正则表达式 20.1 字符匹配 20.2 可选字符集 20.3 或匹配 20.4 数量限定符 20.5 贪婪和懒惰 20.6 定位符 20.7 分组和后向引用 20.8 替换文本 20.9 非捕获分组和预查 1.非捕获分组?: 2.正向预查?= 3.反向预查?<= 4.负正向预查?! 5.负反向预查?<! 6.注释# 20.10 正则表达式的类 20.11 正则表达式的选项 20.12 练习:验证用户输入