一文弄懂C语言const和*组合魔法(c语言如何实现组合)
指针是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之州
* 本文为原创文章,引用或转载请获得作者正式授权,并注明出处。