关于const的恩怨情仇

关于关键字const的用法是一个老生常谈的面试题了,并且项目开发中也会用到,const结合指针更是一个有趣的话题

#include<stdio.h>

int main(void)
{
	const char *ps1 = NULL;  
	char *pc = "Hi xiaofang";
	char buf[] = "helloworld";
	pc = buf;
	char *const ps2 = pc;

	ps1 = buf;
	//ps2 = buf; // TODO ,What is the result?
	printf("%s:%s:%s\n",ps1,ps2,pc);

	return 0;
}

结果是ps2指针是read-only。
常量:
ANSI C 允许声明常量,常量和变量是一模一样,只是常量的值不能修改,可以使用const关键字来声明常量,如:

	int const a;
	const int a;

这样两条语句都是把a声明为一个整数,a的值都不能被修改。所以在coding中可以选择一个比较容易理解和明白的使用,因为a的值不能被修改,所以a的赋值有两中方法:
首先,可以在声明时对a进行初始化,如:

	int const a = 15;

其次,在函数中声明为const的形参在函数被调用时会得到实参的值。
前面举了一个关于指针的例子,涉及指针时有两样东西有可能成为常量-----常量和它所指向的实体:

int *pi;

pi是一个普通的指向整型的指针,再看下面

int const *pci;

pci是一个指向整型常量的指针,可以修改指针的值,但是不能修改它所指向的值,
再来一个看看:

int  *const cpi;

这时cpi为一个指向整型的常量指针,此时指针是常量,它的值无法修改,
但你可以修改它所指向的整型值。继续:

int const * const cpci;

cpci是一个指向整型常量的常量指针,指针的值不可以修改,
指针指向的值不可以修改。

发布了53 篇原创文章 · 获赞 16 · 访问量 2213

猜你喜欢

转载自blog.csdn.net/m0_37757533/article/details/101607539