const test

/*
int main()
{
	//const int pp; //常量,必须进行初始化
	int a = 10;
	int *p=&a;
	//int *const m;//必须进行初始化
	const int *q;//可以不进行初始化
	q = &a;//q 可以进行赋值 *q不能进行修改

	//去掉离其最近的类型,const修饰的就是它
	const int *const *u ;//u可以做修改 *u不能做修改
	u = &q;

	//printf("%d", *q);
	return 0;
}
*/

/*
	printf("%d\n", x);
00E62A0E  mov         eax,dword ptr [x]  
00E62A11  push        eax  

	printf("%d", q);
00E62A29  push        0Ah  
 //常量的输出和变量的输出的区别,常量是直接输出的0A值,而变量是通过从内存中取出
 //值到寄存器中再将该值输出
*/

/*
extern int x;
int main()
{
	x = 20;
	const int d = x;
	const int*x = &d;
	
	printf("\n%d",x);
	printf("%d", d);
	return 0;
}

通过在两处加上extern来引用外部常量,其中const编译时候产生了符号,链接过程中对该符号进行解析。
如何进行修改这个变量中的值,这种情况下进行修改,用到此值时,会到存此常量的地址去找该值,而
不是平常情况下的替换此值,打印出来的值是当前内存中所存的值。

在本文件内使用自己的常量,在编译时候用值代替在引用处,所以即使修改了,打印出来的还是编译时候
所替换的值
*/

/*
int main()
{
	const int *p;//两条意思一样
	int const *q;//可以不进行初始化
	//const右边没有修饰指针或引用就不参与类型

	int *const p;//必须进行初始化
	return 0;
}
*/

/*
内联函数 没有函数栈的开辟,编译时候将函数体的部分在引用处展开
*/

/*  char *const m  //m所指向内存不能变,但是m所指向的内存中的内容可以发生改变
int main()
{
	char *p =new char[20];
	p = "zhongguo";
	char *k = new char[20];
	k = "renminwansui";
	char *const m = p; //m所指向内存不能变,但是m所指向的内存中的内容可以发生改变
	printf("%s\n", p);
	printf("%s", m);
	//m = k;        错
	return 0;
}
*/
/*
 //char const *m 
int main()
{
	char *p = new char[20];
	p = "huanying";
	             //cout<<&p<<endl;
	char const *m = p;//不能通过*m来改变p中的值,但是可以通过对p进行操作来改变其中的值
	p = "zhongguo";
	             //cout<<&p<<endl;
	cout<<m<<endl;//已经修改了其中的值,打印出来的是未修改之前的值
	return 0;
}
*/
//此处的*p是常量,所以在编译过程中对其进行了修改
/*
p = "huanying";
00ED3A67  mov         dword ptr [p],0ED58B0h  
	char const *m = p;//不能通过*m来改变p中的值,但是可以通过对p进行操作来改变其中的值
00ED3A6E  mov         eax,dword ptr [p]  
00ED3A71  mov         dword ptr [m],eax  
	p = "zhongguo";
00ED3A74  mov         dword ptr [p],0ED5928h  
*/
/*
int main()
{
	char x = 'e';
	char const*p = &x;
	x = 'y';
	printf("%c",*p);
	return 0;
}
*/

/*
int main()
{
	int a = 10;
	int *p = &a;
	int *const *q = &p;

	int *m = &a;
	int **const k = &m;

	int *const u = &a;
	int *const*y = &u;

	const int *w = &a;
	const int **v = &w;
	return 0;
}
*/
//引用必须是对有地址的数据进行引用,对于一些数据会做到创建的临时变量来辅助引用
/*
int main()
{
	int **p = NULL;
	const int***q = &p;//“初始化”: 无法从“int ***”转换为“const int ***”
	return 0;//多级指针中const不能多也不能少
}
*/
/*
int main()
{
	int a = 10;
	const int *p = &a;
	const int **q = &p;
    *q = NULL;
	q = NULL;
	//**q = 10;其不是可修改的左值
	return 0;
}
*/
/*
int main()
{
	int a = 1;
	int *const p = &a;
	*p = 20;
}
*/
/*
int main()
{
	int a =10;
	const int *p = &a;
	return 0;
}
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值