c查漏补缺
restrict
要理解什么是restrict,首先要知道Pointer aliasing:指两个或以上的指针指向同一数据,例如:
int i = ;
int *a = &i;
int *b = &i;
这样会有什么问题呢?
如果编译器采用最安全的假设,即不理会两个指针会否指向同一个数据,那么通过指针读取数据是很直观的。然而,这种假设会令编译器无法优化,例如
int foo(int *a,int *b)
{
*a = ;
*b = ;
return *a + *b;//不一定是11
}
(对以下汇编代码表示不懂)
foo:
movl $5,(%rdi) #存储5到*a
movl $6,(%rsi) #存储6到*b
movl (%rdi),%eax #重新读取*a(因为有可能被上一行指令造成改变)
addl $6,%eax #加上6
ret
如果我们确保两个指针不指向同一数据,就可以用restrict修饰指针类型:
int rfoo(int *restrict a,int *restrict b)
{
*a = ;
*b = ;
return *a + *b;
}
编译器就可以根据这个信息,做出优化:
rfoo:
movl $11,%eax #在编译期已计算出11
movl $5,(%rdi) #存储5至*a
movl $6,(%rsi) #存储6到*b
ret
但如果用了restrict去修饰两个指针,而它们在作用域又指向同一地址,那么是未定义行为
三个相关的取字符串函数
getch():从控制台读取一个字符,但不显示在屏幕上(头文件:conio.h)
getche():从控制台读取一个字符并回显(头文件:conio.h)
getchar():从标准输入流读取一个字符并回显,读到回车符时退出()(头文件:stdio.h)
2016-05-17 17:49:34
1.scanf
char s[100]
scanf("%s",s),scanf("%s",&s);
®对数组来说,s数组首元素的地址和&s都指向数组的首地址,故从地址值上来说是一样的;scanf接收一长串字符后,都按这个地址一一往后填字符,故s[100]对应的字符时相同的
区别在于地址偏移:&s+1是数组首地址+sizeof(s),也即指向a[100]后面去了,而a+1指a[0]+1,也即a[1]的地址
®忽略空格和换行,即遇见空格或换行即停止接收
2.getline(cin,str)//str:string类型,头文件string
3.sscanf
char buf[512] ;
sscanf("123456 ", "%s", buf);//此处buf是数组名,表示将123456以%s的形式存入buf中!,可用puts输出
sscanf("123456 ", "%4s", buf);//取最大长度为4字节的字符串放入buf中
sscanf("123456abCdDedfBCsDEF", "%[1-9a-z]", buf);//123456ab,取仅包含1~9,a~z的字符,遇见既不为数字也不为小写字母即停止接收,本例等价于[^A-Z]
sscanf("They/are520@fromChina102", "%*[^/]/%[^@]",buf);//获取/和@之间的字符串
sscanf("hello, world", "%*s%s", buf);//world,注意逗号之后有空格,%s遇空格停止,*s则忽略第一个读到的字符串
参照:http://www.cnblogs.com/zhourongqing/articles/2451757.html
stray'\241'in program:程序中出现了非法的标志符,一般是中文标识符,如空格(删除所有行首和行尾的空格,重新编译)
c查漏补缺的更多相关文章
- 《CSS权威指南》基础复习+查漏补缺
前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...
- js基础查漏补缺(更新)
js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...
- Entity Framework 查漏补缺 (一)
明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关 ...
- 2019Java查漏补缺(一)
看到一个总结的知识: 感觉很全面的知识梳理,自己在github上总结了计算机网络笔记就很累了,猜想思维导图的方式一定花费了作者很大的精力,特共享出来.原文:java基础思维导图 自己学习的查漏补缺如下 ...
- 20165223 week1测试查漏补缺
week1查漏补缺 经过第一周的学习后,在蓝墨云班课上做了一套31道题的小测试,下面是对测试题中遇到的错误的分析和总结: 一.背记题 不属于Java后继技术的是? Ptyhon Java后继技术有? ...
- 今天開始慢下脚步,開始ios技术知识的查漏补缺。
从2014.6.30 開始工作算起. 如今已经是第416天了.不止不觉.时间过的真快. 通过对之前工作的总结.发现,你的知识面.会决定你面对问题时的态度.过程和结果. 简单来讲.知识面拓展了,你才干有 ...
- Mysql查漏补缺笔记
目录 查漏补缺笔记2019/05/19 文件格式后缀 丢失修改,脏读,不可重复读 超键,候选键,主键 构S(Stmcture)/完整性I(Integrity)/数据操纵M(Malippulation) ...
- 【spring源码分析】IOC容器初始化——查漏补缺(四)
前言:在前几篇查漏补缺中,其实我们已经涉及到bean生命周期了,本篇内容进行详细分析. 首先看bean实例化过程: 分析: bean实例化开始后 注入对象属性后(前面IOC初始化十几篇文章). 检查激 ...
- Django 查漏补缺
Django 查漏补缺 Django 内容回顾: 一. Http 请求本质: 网络传输,运用socket Django程序: socket 服务端 a. 服务端监听IP和端口 b. 浏览器发送请求 ...
- Mysql查漏补缺
Mysql查漏补缺 存储引擎 数据库使用存储引擎来进行CRUD的操作,不同的存储引擎提供了不同的功能.Mysql支持的存储引擎有InnoDB.MyISAM.Memory.Merge.Archive.F ...
随机推荐
- Linux Shell系列教程之(十六) Shell输入输出重定向
本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...
- 利用php实现:当获取的网址不是特定网址时候跳转到指定地址
这个问题是在百度知道看到的问答,我不懂做,特定去百度了下.然后结合别人获取域名和跳转的知识,综合做了这个功能,以下是实现代码: <?php //获取当前的域名: echo "获取到的域 ...
- R语言-妹子被追后的选择分析
前提假设 妹子们一生中可以遇到100个追求者,追求者的优秀程度符合正态分布: 每个妹子都具备判断并比较追求者优秀程度的能力: 接受或拒绝一个追求者后永远无法后悔. 那么,问题来了 当遇到追求者时,如何 ...
- phpcms—— 内容中的附件调用和添加远程地址的调用
phpcms中几个地址调用的方法 1,CSS路径有{CSS_PATH}2,图片路径有{IMG_PATH}3,JS路径有{JS_PATH} 4,那么附件的路径如何调用,使用下面的方式可以得到附件的路径前 ...
- 通过原生js添加div和css
function createStyle(){ return"*{padding:0;margin:0;border:0}.loading{width:640px;height:1024px ...
- ArrayList 与 LinkedList
ArrayList:数组结构,插入删除的效率低,查询的效率较高. LinkedList:链接数据结构,插入删除的效率较高,查询的效率低. 两者的使用 ArrayList:适合用作添加数据,做查询. L ...
- C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...
- Atitit。 工作流引擎的发展趋势
Atitit. 工作流引擎的发展趋势 1.1. 图灵完备1 1.2. 图形化与文本化1 1.3. Jit1 1.4. Dsl化2 1.5. Oo2 1.6. 托管与本地代码的互操作2 1.7. 大型 ...
- Fix Internet Explorer Crashes with SharePoint 2013 Online Presence Indicators
IE中,只要是鼠标浮动到人名字上面的状态的时候,这个状态是与Lync相连接的,IE就会出现停止工作. 以下是解决方法. Until the other day when I figured this ...
- android 多屏幕适配 : 第一部分
1.在xml布局文件中,控件的宽度和高度用 dp ; 字体大小用 sp 2.根据屏幕的宽高来动态的适配 , 获取屏幕的宽高的两种方法: 第一种方法: /** * 屏幕的宽度 * 屏幕的高度 * ...