当前位置:  开发笔记 > 编程语言 > 正文

这些声明在C中有什么区别?

如何解决《这些声明在C中有什么区别?》经验,为你挑选了1个好方法。

在C和C++中,以下声明有什么作用?

const int * i;
int * const i;
const volatile int ip;
const int *i;

上述任何声明是否有误?

如果不是它们之间的含义和区别是什么?

什么是上述声明的有效使用(我的意思是在什么情况下,我们在C/C++ /嵌入式C使用它们)?



1> Adam Rosenfi..:

const int * i;

i是一个指向常量整数的指针. i可以更改为指向不同的值,但指向的值i不能更改.

int * const i;

i是一个指向非常数整数的常量指针.i可以更改指向的值,但i不能更改为指向其他值.

const volatile int ip;

这个有点棘手.事实ipconst,这意味着编译器不会让你改变它的值ip.但是,它仍然可以在理论上进行修改,例如通过获取其地址并使用const_cast运算符.这是非常危险的,不是一个好主意,但它是允许的.该volatile限定符表示随时ip被访问,就应该始终从内存中被重新加载,即它不应该在寄存器中进行缓存.这可以防止编译器进行某些优化.volatile如果您有一个可能被另一个线程修改的变量,或者您正在使用内存映射I/O,或者其他可能导致编译器可能不期望的行为的类似情况,您希望使用限定符.使用constvolatile 在同一个变量上相当不寻常(但合法) - 你通常会看到一个而不是另一个.

const int *i;

这与第一个声明相同.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有