C语言与C++语言的一个区别:指针修改const变量

本文探讨了C和C++中const关键字对变量及其指针操作的不同限制。C允许通过指针修改const变量值,而C++则禁止这一行为。重点讲述了为何在C++中const int*类型的指针不能赋值给int*,以及如何在C++中正确处理const指针和非const指针的指向问题。

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

先上C代码:

const int a = 10;
printf("a = %d\n", a);
int* p = &a;
*p = 100;
printf("a = %d\n", a);

这段代码在C语言中,可以正常运行。在C++中,会被告知int* p = &a;报错:

const int *" 类型的值不能用于初始化 "int *" 类型的实体

这段代码运行在以.c结尾的文件中可以通过,.cpp文件无法通过。

结论:

  • C语言允许通过指针修改const修饰的变量值。
  • C++不允许这样做。


在C++代码中:

#include<iostream>

int main()
{

	int a = 10;
	std::cout << "a = " << a << std::endl;
	int* p;
	p = &a;
	*p = 100;
	std::cout << "a = " << a << std::endl;

	const int b = 20;
	int* q;
	// q = &b;  // 不能将const int *类型的值赋值给int *类型的实体。  C语言可以,但是C++不许。


	// 再次变形:如果const修饰的int *
	const int* p1;
	p1 = &a;
	//*p1 = 1000;   // 表达式必须是可修改的左值。这点在C和C++中都一样。
	// 如果const修饰的是int *,不可以修改指针变量指向的内存地址的  值 。
	// 但可以修改指针指向的地址。
	p1 = &b;
	system("pause");
	return 0;

}

 const int* p修改指针指向地址中存储的值,是被禁止的。

但是可以修改指针的指向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值