程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

一文弄懂C语言const和*组合魔法(用c语言实现组合)

balukai 2025-03-17 15:58:11 文章精选 2 ℃

指针是C语言之魂。随着const被引入C语言,形成了魔法般的组合。

你能说出下面六条语句的不同吗?

int* p1;                 // 1
const int* p2;	         // 2
int const* p3;           // 3
int *const p4;           // 4
const int *const p5;     // 5
int const * const p6;    // 6

第一条语句,没得说,声明了一个整数类型指针p1。

第二条,定义了一个整数类型指针p2。加上了限定词const,表示不能通过指针p来改变它所指向的对象的值。然而,p指向的对象并因此成为只读,其值通过其他方式可能发生变化。例如,

int n = 42;
const int* p2 = &n;
*p2 = 42;             // 不可以
n = 13;
assert(*p2 == 13);    // p2指向的n的值发生了变化

第三条语句在语法上等同与第二条,限定词const 放在紧靠类型,前后都行。也就是说,const int* 和int const *同义。

第四条,定义了一个整数指针p4,const在这里的作用是制约p4 -- p4不能改变它的指向。例如

int n = 42;
int *const p4 = &n;
int m = 13;
p4 = &m;      // 不可以

第五条,定义了整数指针p5。通过p5不可以去改变它所指向的对象的值。不能改变p5的指向。例如,

int n = 42;
const int *const p5 = &n;
*n = 13;       // 不可以
int m = 13;
p5 = &m;       // 不可以

第六条与第五条同义,不赘述。

形式上看起来很吓人的const int *const 其实有一个很好的用处 -- 定义函数参数。

void print(const void *const pt);

如此以来,确保了在print函数体内,不能通过指针pt改变它指向的对象的值,同时,确保pt只指向该对象,且pt指向不可更改。也就是说,不能让pt指向其他对象。


希望这篇文章能让你更好理解C语言中指针和const,进而玩转魔法,让代码更精确表达用意。



喜欢就点赞。 更多精彩,请关注我

今日头条号/西瓜视频/抖音:IT之州

* 本文为原创文章,引用或转载请获得作者正式授权,并注明出处。

最近发表
标签列表