const char*类型的值不能用于初始化_嵌入式Linux开发《C语言专题(十:彻底搞懂“关键字”const)》...

本文聚焦C语言中“特殊”关键字,着重讲解const关键字的使用。介绍了const修饰一般变量、数组、指针、函数参数和返回值的情况,指出const修饰的变量为“只读”,能提高程序健壮性,还探讨了不同const写法的等价性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

a2951713f50f13be83017cc78d604ae1.png

C语言中的关键字总共有32个:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while 但是,往往初学者很难会合理使用它们.这个小专题就主要讲解const static void volatile typedef sizeof register extern这些“特殊”关键字的使用方法,可以说能否很好的使用这些关键字可是展示一个C程序员的基本素养。学会了对这些关键字的使用,不仅仅对笔试、面试有帮助,更重要的是对自己以后做项目有很大帮助,别到时候项目主管看到你写的代码后对你失望吆。

这篇文章就先将const这个特殊的关键字。通过这篇文章,你将会搞懂以下代码:

//const修饰一般变量

const int i = 0; int const = 0;

//const修饰数组

const int a[4] = {1, 2, 3, 4} int const a[4] = {1, 2, 3, 4}

//const修饰指针

const int *p

int const *p

int * const p

const int * const p

//const修饰函数参数和返回值

char *strcpy(char *dest, const char *src);

int strcmp(const char *s1, const char *s2);

(1)const全称:constant 也就是恒定不变的意思。如果说看到这个关键字只知道这个关键字是定义常量,那么请你好好看看这篇文章,因为你会有意想不到的收获。

(2)const不仅仅可以定义常量,被它所修饰的东西都受到某种强制保护,说白了就是加了const之后,可以访问但是不能再修改这个变量的值即这个变量是“只读的”。这样做可以提高程序的健壮性。还可以用const来修饰函数的参数、返回值。其中也涉及到const与指针的结合。

注意:在使用const修饰变量时,一定要给变量初始化,否则之后就不能赋值了!

(3)const修饰普通变量、数组和指针变量

在很多地方可能都见到const 类型名 变量名; const 类型名 *变量名;比如const int a; const int *a;const修饰的指针涉及到指针常量和常量指针

#include //演示const关键字用法int main(int argc, char** argv){const int i = 0;i = 1;return 0;}

运行结果:

da12938bae7ee9bc904e79df51bdc47f.png

分析结果:编译没有通过出错,编译器确实提醒我们变量i是只读变量,不能再进行复制操作。

1)const 类型名 变量名与 类型名 const 变量名 一样吗?

一样。将上面代码中const int i = 0;改为int const i = 0;结果一样。不过我们用的比较多和见得比较多的就是const int i = 0这种形式。

8420e23f34873258aecaaa430a12611e.png

2)const 类型名 变量名[数组元素个数]与 类型名 const [数组元素个数] 一样吗?

#include //演示const关键字用法int main(int argc, char** argv){//const int a[4] = {1, 2, 3, 4}; //2种写法显示错误一样 int const a[4] = {1, 2, 3, 4}; a[0] = 2;//想给数组中第一个元素重新赋值,但是失败,因为数组是只读的return 0;}

运行结果:

1e635e43a5cbf1237b5717bc9859eb82.png

分析结果:2种写法一样。但是编译没有通过,显示为read-only只读的。所以当我们要让数组中的不容不改变时可以用const关键字。

3)const 类型名 *变量名与 类型名 const *变量名 一样吗?

#include //演示const关键字用法int main(int argc, char** argv){ int a = 5; const int *i = &a;   *i = 1;  return 0; }

运行结果:

b7bcefaf9bab5a081be70192e5011b3a.png

分析结果:编译没有通过,出错 因为const修饰的是*i

将上面代码中const int *i = 0;改为int const *i = 0;结果一样。 不过我们用的比较多和见得比较多的就是const int *i = 0这种形式。

将前面代码稍微改动一下,如下所示

#include //演示const关键字用法int main(int argc, char** argv){int a = 5, b = 10;const int *i =&a; //*i = 1; //编译都没有通过,出错i = &b; //编译通过,还可以间接访问操作*iprintf("i = %d 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值