C语言入const

有些时候我们希望定义一个变量的值不被修改,就在前面加上const,这样假如不小心在程序中改变了值的话,编译的时候就会提示或者报错,如果希望定义一个地址不被修改的指针,那就在类型的右边加上CONST

int sum(float *a){
	*a =5.8;
}
int main()
{
	const float pi =3.14;// 告诉编译器该变量的值是不能被修改的,
	pi =4;//编译报错;
	sum(&pi);//编译的时候会提示发出警告,告诉你pi是一个CONST 这样传地址是在丢弃CONST 
	//使用const关键字保护数组,如果后面程序尝试改变数组元素的值,编译器将生成一个错误,
	const int days[12]={31,28,31,30,31,30,31,30,31,30,31,30};
	
	int a[5]={1,2,3,4,5};
	const int *pd=a;//指向const的指针*pd不能用于改变值,
	*pd =55;//不允许
	pd[2]=33;//不允许
	a[0]=100;//允许,因为a没有被const限定
	//pd =&a[3]//允许改变指针指向别的地址
	int const *p=a;//定义了一个指针的地址不可修改的指针;
	P=&a[0]//不允许改变地址
	*P=12;//允许这是改变值所以允许
	p[1]=13;//允许也是改变值是可以的
	const int const*p1=a;//地址和值都不能修改的指针
	
}
void add_to(const double ar[],int n,double val) 
{
	/*该函数是告诉编译器,不能修改ar数组中的值 */ 
	/*如果不小心使用 ar[i]++的表达式,编译器就会捕捉到这个错误*/
	/*假如不小心重新定义个指针指向了这个const数组,编译会捕捉到Warning,但是可以运行这里需要注意*/
	/*所以这里一定要理解,这里使用const并不是要求原数组是常量,
	而是该函数处理数组时将其视为常量,不可更改,也就是是说不可以使用ar来改变数组的值,
	所以在定义变量或者函数的的时候,不想别改变原来的值就加上CONST,告诉别人,我是不会改变你的值的*/ 
	double *a =ar;//这里就定义一个指针指向了数组的首地址,这样是错误的做法

	for (int i=0;i<n;i++)
	{
		a[i]+=val;//这样运行程序就串改了原有数组的值,这是我们不希望的 
		ar[i]+=val;//编译的时候会报错,因为ar是const 不能通过ar改变数组的值; 
	}
}
C语言关键字const用于声明一个常量,即变量的值在声明后不能再被修改。被const修饰的变量只能读取其值,不能修改。 在引用的代码中,第四道代码声明了一个指针p,该指针指向一个常量int型变量a。这意味着p所指向的值不能被修改,同时p本身也不能指向其他的变量。因此,对p进行赋值或者修改*p的值都是非法的操作。 在引用的代码中,const修饰的变量a被声明为常量,即a的值不能被修改。当尝试修改a的值时,编译器会报错。 总结起来,C语言关键字const用于声明常量,常量的值在声明后不能再被修改。常量可以修饰变量或指针,使其成为只读或只指向特定变量的指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C语言关键字const详细讲解](https://blog.csdn.net/li1829146612/article/details/119636084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [[C语言]const关键字详解](https://blog.csdn.net/yjlyyj/article/details/125259458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C语言关键字const和指针的结合使用](https://download.csdn.net/download/weixin_38499706/12743173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值