C语言之const修饰符
来源:互联网 发布:仓库平面图制作软件 编辑:程序博客网 时间:2024/05/18 01:27
一、什么是const
const是C语言中一种只读取变量但是不能修改其值的一种修饰符。
二、const的作用
1、const可定义一个常量,一旦定义便不能改变。
2、对数据方便修改,即改变定义的值后,程序中的所有与之相关的值都会改变。
4、可以保护被修饰的东西,防止意外的修改。
5、可以节约空间,因为编译器不会为其分配空间而是保存在符号表中.
6、、const用于限定函数的返回值
const int foo();
const struct mytype foo();
上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时,这个类型仍然包含可以被赋值的变量成员,所以,此时有意义
7、const用于函数的地址传递参数
void foo(const int *p);
这种形式通常用于在数组形式的参数中模拟传值调用。也就是相当于函数调用者声称:"我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,那么就相当于模拟了值传递。这也是const最有用之处了:用来限定函数的形参,这样该函数将不会修改实参指针所指的数据。这里注意了,是函数不应该去修改而不是不能修改,也就是说const不能阻止参数的修改(原因见上)。
1、const的普通用法
const int n = 10;
意思很明显,n是一个只读变量,程序不可以直接修改其值。这里还有一个问题需要注意,即如下使用:int a[n];在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而n只是一个变量。
2、const用于指针
const int *p;
int const *p;
int * const p;
在最后的一种情况下,指针是只读的(即p只读),而在另外两种情况下,指针所指向的对象是只读的(即*p只读)。const 是一个左结合的类型修饰符,它与其左侧的类型修饰符一起为一个类型修饰符,所以,int const 限定 *p,不限定p。int *const 限定p,不限定*p。
这里有一个简便的区分方法:沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
3、const用于函数的地址传递参数
void foo(const int *p);
这种形式通常用于在数组形式的参数中模拟传值调用。也就是相当于函数调用者声称:"我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,那么就相当于模拟了值传递。这也是const最有用之处了:用来限定函数的形参,这样该函数将不会修改实参指针所指的数据。这里注意了,是函数不应该去修改而不是不能修改,也就是说const不能阻止参数的修改(原因见上)。
4、const用于限定函数的返回值
const int foo();
const struct mytype foo();
上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时,这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。
const int n = 10;
意思很明显,n是一个只读变量,程序不可以直接修改其值。这里还有一个问题需要注意,即如下使用:int a[n];在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而n只是一个变量。
2、const用于指针
const int *p;
int const *p;
int * const p;
在最后的一种情况下,指针是只读的(即p只读),而在另外两种情况下,指针所指向的对象是只读的(即*p只读)。const 是一个左结合的类型修饰符,它与其左侧的类型修饰符一起为一个类型修饰符,所以,int const 限定 *p,不限定p。int *const 限定p,不限定*p。
这里有一个简便的区分方法:沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
3、const用于函数的地址传递参数
void foo(const int *p);
这种形式通常用于在数组形式的参数中模拟传值调用。也就是相当于函数调用者声称:"我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,那么就相当于模拟了值传递。这也是const最有用之处了:用来限定函数的形参,这样该函数将不会修改实参指针所指的数据。这里注意了,是函数不应该去修改而不是不能修改,也就是说const不能阻止参数的修改(原因见上)。
4、const用于限定函数的返回值
const int foo();
const struct mytype foo();
上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时,这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。
三、怎样用const
一般的将const用在类型说明符之前,若要定义一个数组有两种形式
int const a[i]={\\\\\}const int a[i]={\\\\\}; 这两种意义是一样的.
若是定义一个指针const·的位置不同意义就不同,如下:
const int *A; //const修饰指向的对象,A可变,A指向的对象不可变 int const *A; //const修饰指向的对象,A可变,A指向的对象不可变 int *const A; //const修饰指针A, A不可变,A指向的对象可变 const int *const A;//指针A和A指向的对象都不可变
0 0
- C语言之const修饰符
- C语言之const修饰符
- C语言的那些小秘密之const修饰符
- C语言的那些小秘密之const修饰符
- C语言的那些小秘密之const修饰符
- C语言的那些小秘密之【const修饰符】
- C语言的那些小秘密之const修饰符
- C语言之const关键字修饰
- c语言const修饰符问题
- C语言const修饰符探秘
- 黑马程序员-------C语言----const修饰符
- C语言const的修饰
- C修饰符const
- C语言的那些小秘密之const修饰符 (http://blog.csdn.net/bigloomy)
- 修饰符之const
- const修饰符在c语言编程中的注意事项
- 【C语言】函数参数中的const修饰符
- C语言类型限定修饰符(十八)const、(*)、
- 使用字体编辑软件修改字体
- 《犯错的孩子值得表扬》
- 解决不同类型手机系统照相机拍照无法确定返回问题
- 牛腩之Javascript
- Ⅰ.2.6.6 如何测试Graphics Views、Graphics Scenes 和 Graphics Items (Qt 4)
- C语言之const修饰符
- quick-cocos2d-x 3.3 gradle eclipse 打包
- 哲学生活中必背的哲学原理
- Android 开发常用代码片段
- 获取WebView高度的问题
- could not initialize proxy - no Session
- obj文件格式与mtl文件格式
- 编译boost遇到g++抱怨的时候
- 关于图片加载优化的小技巧