const以及const指针相关问题

本文详细解析了C语言中的const限定符用法,包括如何使用const修饰对象使其变为只读,以及constchar*与char*const两种指针类型的含义与区别。

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

今天看到execl()库函数的兄弟函数execle()的相关介绍:

 

int execle(const char *path, const char *arg, ..., chart *const envp[]);

 

一下就被const char *和char *const搞懵了。记得前段时间看C++ Primer时印象还蛮深刻的,现在却又忘了。

 

知识啊,只有不断学习使用,才能转变为永久记忆,就像记住心爱mm一切的一切一样。

 

现在就来总结下与const有关的知识点,不断更新加入,谨为方便我和像我一样的菜鸟们记忆学习。

 

1、常量限定符

 

const限定符将一个对象转换为常量,转换后的对象属性将变为只读,并且要求初始化。在诸多面试中,会让写关于字符串处理的各种函数,其中一考察点,即在参数列表中源字符串需要用const来修饰,保护其在函数生命期间不被改写。

 

例如,在写strcpy()函数原型时,就有此类问题(支付宝笔试时就遇过这个问题,可惜那时我年少无知……),函数原型应该为下。

 

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

 

补:对于该函数,还会有问,既然目标字符串已经通过char *类型得到,为什么其函数返回值还需要为目标字符串的地址。

 

答曰,为了链式操作能够顺利进行,例如这样的操作可以方便完成strlen(strcpy(dest, src));

 

2、const char *与 char *const

 

const char *p;

 

p是一个指向char类型的const对象的指针,在此定义中,p本身不是常量,可以为p进行不同的赋值,但是不能修改p指向的对象。并且,p可以指向一个非const的对象,只不过在赋值后,被指向的对象不能再进行任何修改(同时,一个const对象,只能被p这种类型的指针所指)。

 

char a[] = "HelloWorld";

char *const *q = a;

 

q是指向一个非const对象的const指针,可以将其看作一个指向char类型对象的const指针。换句话说,即q在初始化之后,不能再赋值给其他地址值,但是q指向的值可以发生改变。

 

To be Continued.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值