C语言特殊知识点解析
1 数组
1.1 概念
数组是指某种数据类型,在内存上按照顺序存储。中括号([ ])是数组的标识,中括号内的数值标识该种数据类型变量的个数,中括号也有取值的作用。
1.2 数组使用
int a[10]={1,2,3,4,5,6,7,8,9,0}; --数组的定义
int *p=&a[1]; --a[1],是取数组a在内存1位置的值,&a[1],是取a[1]的地址
则p[6]等于8 --p[6],是以&a[1]为起始位置,向上取第六位置的值。
1.3 整数数组清零
1.3.1 bzero()
只能清零。
1.3.2 memset()
可以设定为指定的值。但是,只会置每个字节的低位为指定值。例如:
int a[5] = {1,2,3,4,5};
memset(a,2,sizeof(a));
for(int i=0; i<5; i++){
printf("%d", a[i]); --打印的值为:10000000100000001000000010
}
2 存储类关键字
2.1 auto
只用于具有代码块作用域的变量声明中,修饰局部变量。
2.2 register
只能是局部变量,并且是CPU可以接受的类型,不能取址。可以大大提高运算效率。
2.3 static
(1)static修饰全局变量,只初始化一次,防止在其它文件也被使用。
(2)static修饰局部变量,函数执行完,static变量不会释放。
(3)static修饰函数,该函数只能在本文件使用。
2.4 extern
声明某变量或者函数可外部调用。
2.5 const
3 有符号整形和无符号整形的运算
int main(void)
{
unsigned int a = 6;
int b = -20;
char c;
(a+b>6)?(c=1):(c=0);
return 0;
}则c=1,但a+b=-14;如果a为int类型则c=0。
原来有符号数和无符号数进行比较运算时(==,<,>,<=,>=),有符号数隐式转换成了无符号数(即底层的补码不变,但是此数从有符号数变成了无符号数),
比如上面 (a+b)>6这个比较运算,a+b=-14,-14的补码为1111111111110010。此数进行比较运算时,被当成了无符号数,它远远大于6,所以得到上述结果。
4 原码、反码、补码
因为有符号的原码的真实值不准确,所以出现反码;因为-0这个特殊的值,所以出现的补码。所以,处理器计算的是补码。
5 可重入函数和不可重入函数
不可重入函数指的是该函数在被调用还没有结束以前,再次被调用可能会产生错误。可重入函数不存在这样的问题。
不可重入函数在实现时候通常使用了全局的资源,在多线程的环境下,如果没有很好的处理数据保护和互斥访问,就会发生错误。
常见的不可重入函数有:
printf --------引用全局变量stdout
malloc --------全局内存分配表
free --------全局内存分配表
在unix里面通常都有加上_r后缀的同名可重入函数版本。如果实在没有,不妨在可预见的发生错误的地方尝试加上保护锁同步机制等等。
最新文章
- (转)如何处理iOS中照片的方向
- mvc中Url.RouteUrl或者Html.RouteLink实现灵活超链接,使href的值随路由名称或配置的改变而改变[bubuko.com]
- Merkle Patricia Tree (MPT) 树详解
- NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
- [原创]java WEB学习笔记65:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) ModelDriven拦截器 paramter 拦截器
- 坚持自学的第二天,bootstrap初入门
- CentOS下命令行和桌面模式的切换方法(转载)
- 需求管理(REQM,Requirements Management)工具(转)
- ubuntu16.04 配置opensips服务器并编译pjsip测试
- ES6(二) Destructuring-变量的解构赋值
- 求解n皇后
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(五)
- ClickHouse之访问权限控制
- 转://利用从awr中查找好的执行计划来优化SQL
- VSTO:使用C#开发Excel、Word【16】
- Spring Cloud Finchley 正式发布,包含 4 个重大更新!
- 【PyTorch深度学习60分钟快速入门 】Part4:训练一个分类器
- 201621123018《Java程序设计》第10周学习报告
- 解决Linux上tomcat启动却无法访问
- SqlMap之数据库操作语句总结
热门文章
- swift container server 莫名stuck
- laravel event
- WinExec可能会引起消息重入
- 踩坑录-libreoffice fatal error com.sun.start.ucb.Interactive.AugmentedIOException: a folder could not be created
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- 托管C++线程锁实现 c++11线程池
- 经典面试题回答——学习Java基础的目的
- java 开发webservice
- 2016/2/21 JavaScript简介
- CSP 201612-4 压缩编码 【区间DP+四边形不等式优化】