const的新认识
来源:互联网 发布:铜排折弯算法 编辑:程序博客网 时间:2024/05/16 06:25
今天发现一个有趣的现象,有如下代码:
Void fun(char *p) 和c=d这两行会出现waring 其实这两行都是相同的赋值语句,都是有const修饰的赋值给没有const修饰的。
也就是说只能把没有const修饰的赋值给有const修饰的,反之则waring 。
我在书上摘取以下这段话:
要使上述的赋值形式合法,必须满足下列条件之一:
两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
正是这个条件,使得函数调用中实参 char *能够与形参const char *匹配即
Void fun(const char *a);
Mian()
{
Char *b;
Fun(b);
}正常而不产生waring,它之所以合法,是因为在下面代码中:
Char *cp;
Const char *ccp;
Ccp=cp;
左操作数是一个指向有const限定符的char的指针;
右操作数是一个指向没有限定符的char的指针;
Char类型与chat类型是相容的,左操作数所指向的类型具有右操作数所指向类型的限定符(无),再加上自身的限定符(const);
以上分析便解释了程序为什么会出现waring;
附: const下面定符是修饰指针所指向的类型,而不是指针本身;
关键字const并不能把变量变成常量,在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值。同时const修饰全局变量和修饰局部变量,数据所存储的位置是不同的,所以对于局部变量可以通过获取它本身的地址来改变它的值,而全局变量却不行
void fun( char *p) { printf("%s\n",p); } int main() { const char *a="abcdefg"; fun(a); char *c; const char *b; c=b; b=c; }
Void fun(char *p) 和c=d这两行会出现waring 其实这两行都是相同的赋值语句,都是有const修饰的赋值给没有const修饰的。
也就是说只能把没有const修饰的赋值给有const修饰的,反之则waring 。
我在书上摘取以下这段话:
要使上述的赋值形式合法,必须满足下列条件之一:
两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
正是这个条件,使得函数调用中实参 char *能够与形参const char *匹配即
Void fun(const char *a);
Mian()
{
Char *b;
Fun(b);
}正常而不产生waring,它之所以合法,是因为在下面代码中:
Char *cp;
Const char *ccp;
Ccp=cp;
左操作数是一个指向有const限定符的char的指针;
右操作数是一个指向没有限定符的char的指针;
Char类型与chat类型是相容的,左操作数所指向的类型具有右操作数所指向类型的限定符(无),再加上自身的限定符(const);
以上分析便解释了程序为什么会出现waring;
附: const下面定符是修饰指针所指向的类型,而不是指针本身;
关键字const并不能把变量变成常量,在一个符号前加上const限定符只是表示这个符号不能被赋值,也就是它的值对于这个符号来说是只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值。同时const修饰全局变量和修饰局部变量,数据所存储的位置是不同的,所以对于局部变量可以通过获取它本身的地址来改变它的值,而全局变量却不行
- const的新认识
- 对const的认识
- 对const 的认识
- 对const 指针的认识!
- 工作流的新认识
- Yahoo!--新的认识
- 《大话西游》的新认识
- 认识新的朋友
- UML的新认识
- php的新认识
- ./configure 的新认识
- 认识新的二极管
- SVN 新的认识
- 中断的新认识
- 对 Wicket 的新认识
- 转贴 agile的新认识
- 对英语的新认识
- 对农村的新认识
- Redis配置文件redis.conf参数解读
- win7下搭载php+mysql+apach+netbeans
- Java学习笔记【一】之配置环境变量
- IOS开发之格式化日期时间
- iOS学习笔记(2)— UIView用户事件响应
- const的新认识
- AsyncTask类的使用
- eclipse开发web项目所用插件
- NSDate 使用总结
- Vim的分屏功能
- Linux下db2创建实例、数据库
- Example
- linux--------------git分布式系统项目管理(1)
- Java中的正无穷,负无穷和非数