const int *p、int const *p、int * const p和const int * const p的学习
1. const int *p、int const *p是一个东西
此处修饰的对象是*p,可以这样记忆const右边有*p,所以*p不可修改。
代码运行如下:
// An highlighted block
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a = 111,aa=1;
const int *p1 = &a;
//int const *p1 = &a;
p1 = &aa;
printf("%p\n %d\n", p1, *p1);
//*p1 = aa;//此处编译不通过,表达式应为可修改的左值。
//printf("%p\n %d\n", p1, *p1);
return 0;
}
2.int * const p
此处const修饰的对象是p,可以这样记忆const右边有p,所以p不可修改。
代码运行如下:
// An highlighted block
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a = 111, aa = 1;
int * const p1 = &a;
*p1 = aa;
printf("%p\n %d\n", p1, *p1);
//p1 = &aa;//此处编译不通过,表达式应为可修改的左值。
//printf("%p\n %d\n", p1, *p1);
return 0;
}
3.const int * const p
此处const修饰的对象是*p和p,可以这样记忆第一个const右边有*p,第二个const右边有p,所以*p和p都不可修改
代码运行如下:
// An highlighted block
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a = 111, aa = 1;
int * const p1 = &a;
//*p1 = aa;
//printf("%p\n %d\n", p1, *p1);
//p1 = &aa;//此处编译不通过,表达式应为可修改的左值。
//printf("%p\n %d\n", p1, *p1);
return 0;
}
如若有不对的请大家批评。