(c/c++学习笔记十二)const详解
2014-10-29 10:42
357 查看
一 .const修饰普通变量
const修饰的变量会转换为一个常量
例:
int main(int argc, char *argv[])
{
const int a = 10; //定义一个常量a
int const b = 5; //定义一个常量b 两种方法相等
const int c; //error 常量定义时必须初始化
int d; //定义一个普通变量d
a = 11; //error 尝试修改常量
b = 6; //error 尝试修改常量
d = 1; //给变量赋值
}
二.指向const对象的指针
如果指针指向const对象,则不允许用指针来改变其所指向的const值。为了保证这个特性,c++语言要求指向const对象的指针也必须具有const特性。指向const对象的指针在定义时不需要处死哈哈,如果需要的话,允许给指针重新赋值,使其指向另一个const对象,但不能通过指针修改其所指对象的值。
例:
int main(int argc, char *argv[])
{
const int *pa; //定义指向const对象的指针pa,可以不初始化
int const *pb; //效果同上
int *pc; //定义普通int型指针
const int a = 10, b = 20; //定义const变量 a和b
pa = &a; //给pa赋值
pa = &b; //可以修改pa的值
*pa = 20; //error 不能修改pa指向的值
pc = &a; //error 指向const对象的指针类型也必须是const类型
} 例:
int main(int argc, char *argv[])
{
const int *pa; //定义指向const对象的指针pa,可以不初始化
int a = 30; //定义普通变量a
pa = &a; //指向const对象的指针可以指向非const对象
*pa = 10; //error 同样不能修改const指针指向的内容
printf("%d\n",*pa); //输出30
a = 10; //虽然不能直接修改pa指向的内容,但是由于pa指向的是非const对象,
//可以通过其他方法来修改pa指向的内容
printf("%d\n",*pa); //输出10
}
三.const指针
const指针本身的值不可以修改,但是它指向的内容可以被修改。
例:
int main(int argc, char *argv[])
{
int a = 10, b = 20; //定义普通int型变量a和b
int* const pa = &a; //定义const指针pa const指针必须初始化
const *int pb = &a; //error 没有这个形式
pa = &b; //error 不能修改pa的值
*pa = b; //可以修改pa指向的值
}
四.指向const对象的const指针
指向const对象的const指针,既不能修改指针指向的内容,也不能修改指针本身的值。
例:
int main(int argc, char *argv[])
{
const int a = 10, b = 20; //定义const变量a和b
int* const pa = &pa; //error 指向const对象的指针必须是const类型指针
const int *const pa = &a; //定义指向const对象的const指针
*pa = 20; //error 不能修改指针指向的内容
pa = &b; //error 不能修改指针本身的值
}
五.const形参
函数的形参可以是const类型,函数形参是const类型,在函数内部不能修改参数的值。
例:
void function(const int i)
{
i = 20; //error 不能修改参数的值
}
int main(int argc, char *argv[])
{
int i = 10;
function(i); //如果形参为非引用const类型,实参既可以传const类型,也可以传非const类型
} 例:
void function(int i)
{
i = 20; //可以修改,i是实参的一个副本
}
int main(int argc, char *argv[])
{
const int i = 10;
function(i); //如果形参为非引用普通类型,实参既可以传const类型,也可以传非const类型
}
例:
void function(const int *i) //参数为指向const对象的指针
{
int a = 10;
*i = 20; //不能修改实参指向的内容
i = &a; //可以修改i本身的值
}
int main(int argc, char *argv[])
{
int i = 10;
int *p = &i;
function(p); //如果形参为指针或引用const类型,实参既可以传const类型,也可以传非const类型
} 例:
void function(int *i)
{
*i = 20;
}
int main(int argc, char *argv[])
{
const int i = 10;
const int *p = &i;
function(p); //<span style="font-family: Arial, Helvetica, sans-serif;">如果形参为指针或引用非const类型,实参只能传非const类型</span>
} 例:
void function(int* const i) //参数为const指针
{
int a = 10;
*i = 10; //可以修改指针指向的内容
i = &a; //error 不可以修改指针的本身的值
}
int main(int argc, char *argv[])
{
int i = 10;
int *p = &i;
function(p);
}
六. const char*和 char* const
const char* ptr(char const *prt)指针指向的值是常量
char *const ptr 指针本身的值是常量
例:
int main(int argc, char *argv[])
{
char* pa = "aaaa";
const char* pb = "bbbb";
pa = "cccc"; //可以修改指针本身的值
pb = "cccc"; //<span style="font-family: Arial, Helvetica, sans-serif;">可以修改指针本身的值</span>
pa[0] = 'd'; //编译通过,运行报错,pa指向的是常量,不能修改pa指向的内容
pb[0] = 'd'; //编译报错,pb指向的是const型数据
}
例:int main(int argc, char *argv[])
{
char* const pa = "aaaa";;
pa = "bbbb"; //不能修改pa本身的值
}
const修饰的变量会转换为一个常量
例:
int main(int argc, char *argv[])
{
const int a = 10; //定义一个常量a
int const b = 5; //定义一个常量b 两种方法相等
const int c; //error 常量定义时必须初始化
int d; //定义一个普通变量d
a = 11; //error 尝试修改常量
b = 6; //error 尝试修改常量
d = 1; //给变量赋值
}
二.指向const对象的指针
如果指针指向const对象,则不允许用指针来改变其所指向的const值。为了保证这个特性,c++语言要求指向const对象的指针也必须具有const特性。指向const对象的指针在定义时不需要处死哈哈,如果需要的话,允许给指针重新赋值,使其指向另一个const对象,但不能通过指针修改其所指对象的值。
例:
int main(int argc, char *argv[])
{
const int *pa; //定义指向const对象的指针pa,可以不初始化
int const *pb; //效果同上
int *pc; //定义普通int型指针
const int a = 10, b = 20; //定义const变量 a和b
pa = &a; //给pa赋值
pa = &b; //可以修改pa的值
*pa = 20; //error 不能修改pa指向的值
pc = &a; //error 指向const对象的指针类型也必须是const类型
} 例:
int main(int argc, char *argv[])
{
const int *pa; //定义指向const对象的指针pa,可以不初始化
int a = 30; //定义普通变量a
pa = &a; //指向const对象的指针可以指向非const对象
*pa = 10; //error 同样不能修改const指针指向的内容
printf("%d\n",*pa); //输出30
a = 10; //虽然不能直接修改pa指向的内容,但是由于pa指向的是非const对象,
//可以通过其他方法来修改pa指向的内容
printf("%d\n",*pa); //输出10
}
三.const指针
const指针本身的值不可以修改,但是它指向的内容可以被修改。
例:
int main(int argc, char *argv[])
{
int a = 10, b = 20; //定义普通int型变量a和b
int* const pa = &a; //定义const指针pa const指针必须初始化
const *int pb = &a; //error 没有这个形式
pa = &b; //error 不能修改pa的值
*pa = b; //可以修改pa指向的值
}
四.指向const对象的const指针
指向const对象的const指针,既不能修改指针指向的内容,也不能修改指针本身的值。
例:
int main(int argc, char *argv[])
{
const int a = 10, b = 20; //定义const变量a和b
int* const pa = &pa; //error 指向const对象的指针必须是const类型指针
const int *const pa = &a; //定义指向const对象的const指针
*pa = 20; //error 不能修改指针指向的内容
pa = &b; //error 不能修改指针本身的值
}
五.const形参
函数的形参可以是const类型,函数形参是const类型,在函数内部不能修改参数的值。
例:
void function(const int i)
{
i = 20; //error 不能修改参数的值
}
int main(int argc, char *argv[])
{
int i = 10;
function(i); //如果形参为非引用const类型,实参既可以传const类型,也可以传非const类型
} 例:
void function(int i)
{
i = 20; //可以修改,i是实参的一个副本
}
int main(int argc, char *argv[])
{
const int i = 10;
function(i); //如果形参为非引用普通类型,实参既可以传const类型,也可以传非const类型
}
例:
void function(const int *i) //参数为指向const对象的指针
{
int a = 10;
*i = 20; //不能修改实参指向的内容
i = &a; //可以修改i本身的值
}
int main(int argc, char *argv[])
{
int i = 10;
int *p = &i;
function(p); //如果形参为指针或引用const类型,实参既可以传const类型,也可以传非const类型
} 例:
void function(int *i)
{
*i = 20;
}
int main(int argc, char *argv[])
{
const int i = 10;
const int *p = &i;
function(p); //<span style="font-family: Arial, Helvetica, sans-serif;">如果形参为指针或引用非const类型,实参只能传非const类型</span>
} 例:
void function(int* const i) //参数为const指针
{
int a = 10;
*i = 10; //可以修改指针指向的内容
i = &a; //error 不可以修改指针的本身的值
}
int main(int argc, char *argv[])
{
int i = 10;
int *p = &i;
function(p);
}
六. const char*和 char* const
const char* ptr(char const *prt)指针指向的值是常量
char *const ptr 指针本身的值是常量
例:
int main(int argc, char *argv[])
{
char* pa = "aaaa";
const char* pb = "bbbb";
pa = "cccc"; //可以修改指针本身的值
pb = "cccc"; //<span style="font-family: Arial, Helvetica, sans-serif;">可以修改指针本身的值</span>
pa[0] = 'd'; //编译通过,运行报错,pa指向的是常量,不能修改pa指向的内容
pb[0] = 'd'; //编译报错,pb指向的是const型数据
}
例:int main(int argc, char *argv[])
{
char* const pa = "aaaa";;
pa = "bbbb"; //不能修改pa本身的值
}
相关文章推荐
- C++学习笔记四(const详解)
- c++学习笔记-------const限定修饰符和引用
- C++学习笔记:const和static
- C++ FAQ学习笔记 18章 const正确性
- C++学习笔记---const 关键字
- C++ STL学习笔记十二 hash_map映照容器
- C++学习笔记之const
- C++学习笔记(二):使用const、static类成员的注意事项
- c++学习笔记十二
- C++中const保护数据的学习笔记
- Thinking in C++ 学习笔记(1) 类中的const
- 【菜鸟C++学习笔记】11.内联函数与const成员函数
- 学习C++笔记(引用、const、iterator)
- C++学习笔记――const
- C/C++学习笔记之const的学习
- C++学习笔记1-const引用
- c++学习笔记之c++作用域详解
- 设计模式C++学习笔记之十二(Command命令模式)
- C++ Primer 学习笔记十二 —— 类
- c++学习笔记之函数重载与const的关系