栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

经典问题解析

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

经典问题解析

一、关于const的疑问

 1.const常量的判别准则      --- 只用用字面量初始化的const常量才会进入符号表      --- 使用其它变量初始化的const常量仍然是只读变量      --- 被volatile修饰的const的常量不会进入符号表,只是的得到一个只读变量,而这个只读变量不能出现在赋值符号的左边        注意:在编译期间不能直接确定初始值的const标识符,都被作为只读变量处理    2.const引用的类型与初始化变量的类型         --相同:初始化变量称为只读变量         --不同:生成一个新的只读变量
#include
int main()
{
	
	const int x=1;  //x进入符号表
	
	const int& rx=x; //rx为只读变量,内存空间由编译器为x分配的
	
	int& nrx =const_cast(rx); //	去掉rx的只读属性
	
	nrx=5;
	
	printf(" x = %dn",x);
	printf(" rx =%dn",rx);
	printf("nrx = %dn",nrx);
	
	printf(" &x = %pn",&x);
	printf(" &rx =%pn",&rx);
	printf("&nrx = %pn",&nrx);
	
	
	volatile const int y =2; //只读变量而不是常量
	
	int* p =const_cast(&y);
	
	*p =6;
	printf(" y = %dn",y);
	printf(" &y = %pn",&y);
	
	const int z=y; //y 只是一个变量,所以z也是只读变量
	 p =const_cast(&z);
	
	*p =7;
	printf(" z = %dn",z);
	printf(" &p = %pn",&p);
	
	
	char c ='c';
	char& rc =c;
	const int& trc = c;
	 
	 rc='a';
	
	printf("  c = %cn",c);
	printf("  rc = %cn",rc);
	printf(" trc = %cn",trc);  //const引用初始变量类型不同,将产生一个新的只读变量
	return 0;
}

二、引用与指针的关系      1.指针是一个变量          --值为一个内存地址,不需要初始化,可以保存不同的地址           --通过指针可以访问对应内存地址中的值           --指针被const修饰称为常量或者只读变量       2.引用只是一个变量的新名字         --对引用的操作(赋值,取地址等)等会传递到代表的变量上          --const引用使其代表的变量具有只读属性         --引用必须在定义时初始化,之后无法代表其它变量       3.从使用C++语言的角度看           -- 引用与指针没有任何关系           --引用是变量的新名字,操作引用就是操作对应的变量      4.从C++编译器的角度看          -- 在编译器内部,使用指针常量来实现“引用”           --因此 “引用”在定义时必须初始化     5.c++中不支持引用数组
#include
int a =1;
struct SV
{
	int &x;
	int &y;
	int &z;
	
};
int main()
{
	int b=2;
	int* pc = new int(3);
	
	//
	//&array[1] - &array[0] = ? 期望是4,实际地址差异很大
	//int& array[]={a,b,*pc};  //报错,因为数组中的每个元素是顺序存放的
	
	SV sv={a,b,*pc};
	
	printf("&sv.x = %pn",&sv.x);
	printf("&sv.y = %pn",&sv.y);
	printf("&sv.z = %pn",&sv.z);
	
	delete pc;
	return 0;
		
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/529190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号