C++语言const修饰指针
2015-09-23 20:25
363 查看
一、const修饰某类型的指针
“const int * p1”,p1是指向int型的指针变量,然后再作为常量。变量的地址可以改变,但内容不能改变,类型也必须一致。
{
//新分配一块int型空间,再将p1指向新空间作为常量,OK!
p1 =
cout << "p1: " << *p1 << endl;
//将p1指向非int型变量作为常量,NG!
//p1 = &c; //类型不匹配
//将p1指向int型变量作为常量,OK!
p1 = &x;
cout << "p1: " << *p1 << endl;
//修改p1的地址,OK!
p1 = &y; //地址可以被修改
cout << "p1: " << *p1 << endl;
//修改p1指针的值,NG!
//*p1 = 156; //指针值不能被修改
//通过其它变量,间接地修改p1指针的值,OK!
y = 158;
cout << "p1: " << *p1 << endl;
}
[/code]
二、const修饰指针后再限定类型
“int const * p2”,p2是指针变量,然后再作为常量并限制为int类型。变量的地址可以改变,但内容不能改变,类型也必须一致。
许多书上都说,这和“const int * p1”不一样,但究竟哪儿不一样却不说明。小雅作了很多测试,认为是一样的。等将来发现有不一样之处,再来更新此页吧。
{
//新分配一块int型空间,再将p2指向新空间作为常量,OK!
p2 =
cout << "p2: " << *p2 << endl;
//将p2指向非int型变量作为常量,NG!
//p2 = &c; //类型不匹配
//将p2指向int型变量作为常量,OK!
p2 = &x;
cout << "p2: " << *p2 << endl;
//修改p2的地址,OK!
p2 = &y; //地址可以被修改
cout << "p2: " << *p2 << endl;
//修改p2指针的值,NG!
//*p2 = 156; //指针值不能被修改
//通过其它变量,间接地修改p2指针的值,OK!
y = 158;
cout << "p2: " << *p2 << endl;
}
[/code]
三、const修饰指针地址
“int * const p3”,p3是指针变量,其地址作为常量并指针限制为int类型。变量的地址不可以改变,但内容可以改变。定义时必须同时赋初始值。
{
//int * const p3; //编译出错,初始化必须赋值
//新分配一块int型空间,再将p3指向新空间作为常量,NG!
//p3 = new int(100);
//修改p3的地址,NG!
//p3 = &y; //地址不能被修改
//修改p3指针的值,OK!
*p3 = 156; //指针值可以被修改
cout << "p3: " << *p3 << endl;
}
[/code]
四、const修饰指针并修饰地址
“const int * const p4”,这是前2种的结合,既不允许修改地址,也不允许修改内容。
{
//const int * const p4; //编译出错,初始化必须赋值
//修改p4的地址,NG!
//p4 = &y; //地址不能被修改
//修改p4指针的值,NG!
//*p4 = 156; //指针值不能被修改
cout << "p4: " << *p4 << endl;
//通过其它变量,间接地修改p4指针的值,OK!
x = 123;
cout << "p4: " << *p4 << endl;
}
[/code]
“const int * p1”,p1是指向int型的指针变量,然后再作为常量。变量的地址可以改变,但内容不能改变,类型也必须一致。
#include<iostream>
using namespacestd;
intmain ( )
{
intx = 12;
inty = 25;
charc = 'D';
const int* p1;
//新分配一块int型空间,再将p1指向新空间作为常量,OK!
p1 =
new int(100);
cout << "p1: " << *p1 << endl;
deletep1;
//将p1指向非int型变量作为常量,NG!
//p1 = &c; //类型不匹配
//将p1指向int型变量作为常量,OK!
p1 = &x;
cout << "p1: " << *p1 << endl;
//修改p1的地址,OK!
p1 = &y; //地址可以被修改
cout << "p1: " << *p1 << endl;
//修改p1指针的值,NG!
//*p1 = 156; //指针值不能被修改
//通过其它变量,间接地修改p1指针的值,OK!
y = 158;
cout << "p1: " << *p1 << endl;
return0;
}
[/code]
二、const修饰指针后再限定类型
“int const * p2”,p2是指针变量,然后再作为常量并限制为int类型。变量的地址可以改变,但内容不能改变,类型也必须一致。
许多书上都说,这和“const int * p1”不一样,但究竟哪儿不一样却不说明。小雅作了很多测试,认为是一样的。等将来发现有不一样之处,再来更新此页吧。
#include<iostream>
using namespacestd;
intmain ( )
{
intx = 12;
inty = 25;
charc = 'D';
int const* p2;
//新分配一块int型空间,再将p2指向新空间作为常量,OK!
p2 =
new int(100);
cout << "p2: " << *p2 << endl;
deletep2;
//将p2指向非int型变量作为常量,NG!
//p2 = &c; //类型不匹配
//将p2指向int型变量作为常量,OK!
p2 = &x;
cout << "p2: " << *p2 << endl;
//修改p2的地址,OK!
p2 = &y; //地址可以被修改
cout << "p2: " << *p2 << endl;
//修改p2指针的值,NG!
//*p2 = 156; //指针值不能被修改
//通过其它变量,间接地修改p2指针的值,OK!
y = 158;
cout << "p2: " << *p2 << endl;
return0;
}
[/code]
三、const修饰指针地址
“int * const p3”,p3是指针变量,其地址作为常量并指针限制为int类型。变量的地址不可以改变,但内容可以改变。定义时必须同时赋初始值。
#include<iostream>
using namespacestd;
intmain ( )
{
intx = 12;
inty = 25;
//int * const p3; //编译出错,初始化必须赋值
int*
constp3 = &x;
//新分配一块int型空间,再将p3指向新空间作为常量,NG!
//p3 = new int(100);
//修改p3的地址,NG!
//p3 = &y; //地址不能被修改
//修改p3指针的值,OK!
*p3 = 156; //指针值可以被修改
cout << "p3: " << *p3 << endl;
return0;
}
[/code]
四、const修饰指针并修饰地址
“const int * const p4”,这是前2种的结合,既不允许修改地址,也不允许修改内容。
#include<iostream>
using namespacestd;
intmain ( )
{
intx = 12;
inty = 25;
//const int * const p4; //编译出错,初始化必须赋值
const int*
constp4 = &x;
//修改p4的地址,NG!
//p4 = &y; //地址不能被修改
//修改p4指针的值,NG!
//*p4 = 156; //指针值不能被修改
cout << "p4: " << *p4 << endl;
//通过其它变量,间接地修改p4指针的值,OK!
x = 123;
cout << "p4: " << *p4 << endl;
return0;
}
[/code]
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C# Pointer指针应用实例简述
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C++变位词问题分析