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