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;
}
*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章