一起talk C栗子吧(第一百六十四回:C语言实例--const关键字)
2016-06-11 21:52
267 查看
各位看官们,大家好,上一回中咱们说的是三目运算符的例子,这一回咱们说的例子是:const关键字 。闲话休提,言归正转。让我们一起talk C栗子吧!
我们在前面章回中介绍了很多系统编程接口,在这些接口的参数中经常出现const关键字,有看官对此提出了疑问“这些const有什么用处呢?”。今天,我将和大家一起来解决该疑问。
在C语言中const是一种修饰符,经常用来修饰变量。使用它修饰以后的变量,就成为常量。常量是不允许被修改的。下我们举个简单的例子来说明const的用法。
在上面的例子中,我们使用const修饰变量a,从此a就变成了常量;我们定义指针p,它指向常量a的地址,同时也使用const修饰指针p。
我们把上面的代码保存到test.c文件中,然后开始编译,编译的结果如下:
大家可以看到,编译出错了,错误信息中提示:代码中的11行和12行有错误。结合上面的代码来看,我们在11行直接修改常量a的值,在12行通过指针p间接地修改常量a的值。可见直接或者间接修改常量的做法是错误的,这种做法完全不符合C语言的语法要求。
现在回到本章回开始时提出的问题:系统编程接口的参数中经常出现const关键字。比如我们刚刚介绍完的套接字接口:
该接口的第二个参数是指向套接字地址的指针:addr,const修饰了该参数。通过刚才的例子,我们可以知道使用const修饰以后,我们就不能间接地使用指针addr修改它指向的套接字地址。
大家仔细想一想,我们使用connect接口的目的是为了通过套接字建立连接,然后开始通信,如果我们通过该接口把套接字的地址修改了,那么就会影响通信,因此,使用const来修饰接口中的参数就是为了防止使用接口的时候,传递给接口的参数被修改。说到这里,我相信大家心里的疑问应该解决了。
看官们,其实不只是系统编程的接口,在C标准库中,几乎所有的库函数都使用const修饰指针类型的参数,这样做的目的就是为防止使用库函数的时候,函数中的参数被修改。
各位看官,关于const关键字的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
我们在前面章回中介绍了很多系统编程接口,在这些接口的参数中经常出现const关键字,有看官对此提出了疑问“这些const有什么用处呢?”。今天,我将和大家一起来解决该疑问。
在C语言中const是一种修饰符,经常用来修饰变量。使用它修饰以后的变量,就成为常量。常量是不允许被修改的。下我们举个简单的例子来说明const的用法。
1 #include <stdio.h> 2 3 int main() 4 { 5 6 const int a = 3; 7 const int *p = &a; 8 9 printf("the value of a is: a=%d \n",a); 10 11 a = 5; 12 *p = 5; 13 14 printf("the value of a is: a=%d \n",a); 15 16 return 0; 17 }
在上面的例子中,我们使用const修饰变量a,从此a就变成了常量;我们定义指针p,它指向常量a的地址,同时也使用const修饰指针p。
我们把上面的代码保存到test.c文件中,然后开始编译,编译的结果如下:
$gcc test.c -o test test.c:11:2: error: assignment of read-only variable ‘a’ a = 5; ^ test.c:12:2: error: assignment of read-only location ‘*p’ *p = 5;
大家可以看到,编译出错了,错误信息中提示:代码中的11行和12行有错误。结合上面的代码来看,我们在11行直接修改常量a的值,在12行通过指针p间接地修改常量a的值。可见直接或者间接修改常量的做法是错误的,这种做法完全不符合C语言的语法要求。
现在回到本章回开始时提出的问题:系统编程接口的参数中经常出现const关键字。比如我们刚刚介绍完的套接字接口:
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen)
该接口的第二个参数是指向套接字地址的指针:addr,const修饰了该参数。通过刚才的例子,我们可以知道使用const修饰以后,我们就不能间接地使用指针addr修改它指向的套接字地址。
大家仔细想一想,我们使用connect接口的目的是为了通过套接字建立连接,然后开始通信,如果我们通过该接口把套接字的地址修改了,那么就会影响通信,因此,使用const来修饰接口中的参数就是为了防止使用接口的时候,传递给接口的参数被修改。说到这里,我相信大家心里的疑问应该解决了。
看官们,其实不只是系统编程的接口,在C标准库中,几乎所有的库函数都使用const修饰指针类型的参数,这样做的目的就是为防止使用库函数的时候,函数中的参数被修改。
各位看官,关于const关键字的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
相关文章推荐
- c++部分知识小结&static和const的解释
- C++ vector用法
- C++的三种new简介及重载局部(类内部)与全局operator new
- 数组名a与数组名取地址&a的差异
- Debug Assertion Failed!........File:dbgdel.cpp
- C语言实现分布式自增有序的唯一ID生成算法-snowflake算法
- 利用c语言实现写入数据
- Geekban极客班 C++第五周
- C++中#if,#ifdef,ifndef
- 【每天学一点】C++基础03
- C++的函数重载
- c语言实现图的深度优先遍历和广度优先遍历
- 阶乘计算升级版(大整数)
- c&c++函数变参的实现
- 详解C/C++预处理器
- c语言中的strlen函数
- C++实现图片的base64编码
- C++可变参数函数
- c++类中static 类型变量使用
- C++基础总结