c语言const u8,C语言中的const

本文详细阐述了C++中const关键字与宏的区别,包括类型检查、编译期常量、指针修饰等方面,并通过示例展示了const在声明常量、指针常量和常指针变量时的应用,强调了const在程序健壮性和效率上的优势。
摘要由CSDN通过智能技术生成

大家几乎都能知道,关键字const是用于定义常量,如果一个常量被const修饰了,那么它就不能被修改了。也有人可能会想,不是有#define为啥非要用const。的确!在一定场景下宏可以实现const相近的作用,但是const和宏相比还是有很大区别的:

1、预编译指令只是对值进行简单的替换,不能进行类型检查

2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性

3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

const的几种常用方法

int main(int argc, char const *argv[])

{

/*

const int a; /

int const a; 有一样的意思

如果我们给出 const int a;你应该知道这是将a常量化了,但是为什么那?

那是因为int 和const 都作为一个类型限定词,有相同的地位。

所以你也可以写成 int const a;似乎这样更加好理解!当然这都不难,

难点在哪里哪?当然此时你如果定义指针也是可以修改的,但是会报警告!

当然强制类型转换后警告也不会报了!

所以 const int a=10; 是申明了一个只可读的变量,如果 a=12;在编译期报错。

*/

/*1、申明一个常变量*/

const int a=10;

/* a =12; 变异错误,a是编译期常量 */

int b=10,c=55;

/*2、 申明一个指针, 该指针指向的变量不可更改 ,相当于通过*p指针获得了原来实例的可读版本

一般用于子函数调用中形参函数,限制子函数中不能对调用放内容进行更改

如 const char* src; 或 char const *src;

*p是常量。也就是说,p指向的数据是常量

const int* p

int const *P;

const int* p; 这是修饰了谁那?其实我们可以这样想,如果我们把int 拿出来

也就是 const int (*p); 等价于 int const (*p);

由此我们可以看出来const修饰了*p啊!

也就是指向的内容不可以改变,比如p已经指向a变量,但是*p=45;会报错,因为*p不可改变

但是地址是可以改变的。比如c=55, p=&c;是正确的

但是我们如果写为int const *p 似乎就非常好理解了。就是修饰了*p

*/

const int* p=&a;

/* *p=45; 会报错 */

p=&c;//正确做法

//*p=445; 不可更改

c=43534;//通过原来变量名可更改,相当于通过p指针获得了c变量的可读版本

int const *ptr=&b;

/* *ptr=44; *ptr 是不可更改 */

/* 3、 申明一个常指针变量 也就是说 该指针你只能赋值一次, 且只能在定义时候赋值 ;

但是指针指向的变量可以改变

int * const p;

*/

int* const ptr2=&b;

*ptr2=3454;

fprintf(stdout, "%d\n", *ptr2 );

/* 4、 const int *const p

表示p指针是一个常指针变量,同时指向的变量也是常量不可更改

*/

const int *const ptr3=&c;

/* ptr3=&a; 错误,ptr3 是常指针变量, 只读的 */

/* *ptr3=80; 错误,*ptr3 是常量不可更改,只读的 */

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值