常量指针应用解析
const修饰的是 * p,即*p的内容不可通过p改变,但p不是const,p可以修改,*p不可修改;
#include <iostream>
using namespace std;
int main()
{
int a = 100;
int c = 300;
const int *p = &a; //常量指针,不可以通过指针改变指向对象的值,
//也即指针失去了改变指向地址的存储修改权
cout <<"p "<<p<<endl;
cout <<"*p "<<*p<<endl;
int const *q = &c;
cout <<"q "<<q<<endl;
cout <<"*q "<<*q<<endl;
a = 2; //可以通过原来的声明修改值
c = 3;
cout <<"p "<<p<<endl;
cout <<"*p "<<*p<<endl;
cout <<"q "<<q<<endl;
cout <<"*q "<<*q<<endl;
//*p = 1; error 无修改指针所指内存地址上存储值的权限
//cout <<p <<endl;
//cout <<*p <<endl;
//*q = 1; error 无修改指针所指内存地址上存储值的权限
//cout <<"q "<<q<<endl;
//cout <<"*q "<<*q<<endl;
int b = 200;
p = &b;
cout <<"p "<<p<<endl;
cout <<"*p "<<*p<<endl;
int d = 400;
q = &d;
cout <<"q "<<q<<endl;
cout <<"*q "<<*q<<endl;
return 0;
}
运行结果
p 0x7ffcbaf45c2c
*p 100
q 0x7ffcbaf45c28
*q 300
p 0x7ffcbaf45c2c
*p 2
q 0x7ffcbaf45c28
*q 3
p 0x7ffcbaf45c24
*p 200
q 0x7ffcbaf45c20
*q 400
指针常量应用解析
const修饰的是p,p是指针,p指向的地址不能修改,p不能修改,但*p可以修改;
#include <iostream>
using namespace std;
int main()
{
int a =100;
//const int *p = &a; //常量指针,不可以通过指针改变指向对象的值,
//也即指针失去了改变指向地址的存储修改权
int* const p = &a; //指针常量
cout <<p<<endl;
cout <<*p<<endl;
a = 2; //可以通过原来的声明修改值
cout <<p<<endl;
cout <<*p<<endl;
*p = 1; //error 无修改指针所指内存地址上存储值的权限
cout <<p<<endl;
cout <<*p<<endl;
/**
int b = 200;
p = &b;
cout <<p<<endl;
cout <<*p<<endl;
**/
return 0;
}
运行结果
0x7ffdc6862434
100
0x7ffdc6862434
2
0x7ffdc6862434
1
指向常量的常量指针应用解析
指向常量的常量指针既不可以修改指针指向的地址也不可以指向指向内存地址上存储的值,只可以通过原声明修改
#include <iostream>
using namespace std;
int main()
{
int a =100;
const int* const p = &a;//指向常量的常量指针
cout <<p<<endl;
cout <<*p<<endl;
a = 2; //可以通过原来的声明修改值
cout <<p<<endl;
cout <<*p<<endl;
/**
*p = 1; //error 无修改指针所指内存地址上存储值的权限
cout <<p<<endl;
cout <<*p<<endl;
int b = 200;
p = &b; //error 无修改指针所指内存地址
cout <<p<<endl;
cout <<*p<<endl;
**/
return 0;
}
运行结果
0x7ffffe51f104
100
0x7ffffe51f104
2