/*
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;
}
*/
const test
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.