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查漏补缺的更多相关文章

  1. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  2. js基础查漏补缺(更新)

    js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...

  3. Entity Framework 查漏补缺 (一)

    明确EF建立的数据库和对象之间的关系 EF也是一种ORM技术框架, 将对象模型和关系型数据库的数据结构对应起来,开发人员不在利用sql去操作数据相关结构和数据.以下是EF建立的数据库和对象之间关系 关 ...

  4. 2019Java查漏补缺(一)

    看到一个总结的知识: 感觉很全面的知识梳理,自己在github上总结了计算机网络笔记就很累了,猜想思维导图的方式一定花费了作者很大的精力,特共享出来.原文:java基础思维导图 自己学习的查漏补缺如下 ...

  5. 20165223 week1测试查漏补缺

    week1查漏补缺 经过第一周的学习后,在蓝墨云班课上做了一套31道题的小测试,下面是对测试题中遇到的错误的分析和总结: 一.背记题 不属于Java后继技术的是? Ptyhon Java后继技术有? ...

  6. 今天開始慢下脚步,開始ios技术知识的查漏补缺。

    从2014.6.30 開始工作算起. 如今已经是第416天了.不止不觉.时间过的真快. 通过对之前工作的总结.发现,你的知识面.会决定你面对问题时的态度.过程和结果. 简单来讲.知识面拓展了,你才干有 ...

  7. Mysql查漏补缺笔记

    目录 查漏补缺笔记2019/05/19 文件格式后缀 丢失修改,脏读,不可重复读 超键,候选键,主键 构S(Stmcture)/完整性I(Integrity)/数据操纵M(Malippulation) ...

  8. 【spring源码分析】IOC容器初始化——查漏补缺(四)

    前言:在前几篇查漏补缺中,其实我们已经涉及到bean生命周期了,本篇内容进行详细分析. 首先看bean实例化过程: 分析: bean实例化开始后 注入对象属性后(前面IOC初始化十几篇文章). 检查激 ...

  9. Django 查漏补缺

    Django 查漏补缺 Django  内容回顾: 一. Http 请求本质: 网络传输,运用socket Django程序: socket 服务端 a. 服务端监听IP和端口 b. 浏览器发送请求 ...

  10. Mysql查漏补缺

    Mysql查漏补缺 存储引擎 数据库使用存储引擎来进行CRUD的操作,不同的存储引擎提供了不同的功能.Mysql支持的存储引擎有InnoDB.MyISAM.Memory.Merge.Archive.F ...

随机推荐

  1. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  2. 利用php实现:当获取的网址不是特定网址时候跳转到指定地址

    这个问题是在百度知道看到的问答,我不懂做,特定去百度了下.然后结合别人获取域名和跳转的知识,综合做了这个功能,以下是实现代码: <?php //获取当前的域名: echo "获取到的域 ...

  3. R语言-妹子被追后的选择分析

    前提假设 妹子们一生中可以遇到100个追求者,追求者的优秀程度符合正态分布: 每个妹子都具备判断并比较追求者优秀程度的能力: 接受或拒绝一个追求者后永远无法后悔. 那么,问题来了 当遇到追求者时,如何 ...

  4. phpcms—— 内容中的附件调用和添加远程地址的调用

    phpcms中几个地址调用的方法 1,CSS路径有{CSS_PATH}2,图片路径有{IMG_PATH}3,JS路径有{JS_PATH} 4,那么附件的路径如何调用,使用下面的方式可以得到附件的路径前 ...

  5. 通过原生js添加div和css

    function createStyle(){ return"*{padding:0;margin:0;border:0}.loading{width:640px;height:1024px ...

  6. ArrayList 与 LinkedList

    ArrayList:数组结构,插入删除的效率低,查询的效率较高. LinkedList:链接数据结构,插入删除的效率较高,查询的效率低. 两者的使用 ArrayList:适合用作添加数据,做查询. L ...

  7. C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串

    C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...

  8. Atitit。  工作流引擎的发展趋势

    Atitit.  工作流引擎的发展趋势 1.1. 图灵完备1 1.2. 图形化与文本化1 1.3. Jit1 1.4. Dsl化2 1.5. Oo2 1.6. 托管与本地代码的互操作2 1.7. 大型 ...

  9. Fix Internet Explorer Crashes with SharePoint 2013 Online Presence Indicators

    IE中,只要是鼠标浮动到人名字上面的状态的时候,这个状态是与Lync相连接的,IE就会出现停止工作. 以下是解决方法. Until the other day when I figured this ...

  10. android 多屏幕适配 : 第一部分

    1.在xml布局文件中,控件的宽度和高度用  dp ;   字体大小用 sp 2.根据屏幕的宽高来动态的适配 , 获取屏幕的宽高的两种方法: 第一种方法: /** * 屏幕的宽度 * 屏幕的高度 * ...