上次,一个同学问我,你知不知道可以不用引入中间变量就可以实现swap? 我说,我知道,可以用加减法或者异或实现,像是这样 void mySwap(int &x,int &y) { x=x+y; y=x-y; x=x-y; } 或者这样 void mySwap(int &x,int &y) { x=x^y; y=x^y; x=x^y; } 但这种花式swap没什么意义,而且具有风险,那就是如果参数引用的是同一个变量,将产生错误的结果0. 这种问题叫pointer aliasi…
1.第一种实现swap函数的方法是: swap(int a,int b) { Int c = a;a = b;b =c; } 这表面一看确实是实现了整数a,b的交换,当拿来用时发现,结果并不是我们想要的.分析一下原因:在main中int x=1,y=2;然后调用swap(x,y):这相当于int a = x ; int b = y;这样完成了赋值操作(对形参赋值),在swap函数内部对a和b的替换和main中的x,y没有任何关系了,所以当然不能完成x,y的互换了. 2.现在呢,来看一下第二种实现…
原文地址 Type punning isn't funny: Using pointers to recast in C is bad. C语言中一个重新解释(reinterpret)数据类型的技巧有可能造成严重的bug.Apple知道,这也是为什么NSRectToCGRect的实现并没有按照文档的声明执行.我在这里展示一种安全的在你的代码中重新解释数据的技术. Apple的NSRectToCGRect文档称函数如此定义: CGRect NSRectToCGRect(NSRect nsrect)…
restrict 要理解什么是restrict,首先要知道Pointer aliasing:指两个或以上的指针指向同一数据,例如: ; int *a = &i; int *b = &i; 这样会有什么问题呢? 如果编译器采用最安全的假设,即不理会两个指针会否指向同一个数据,那么通过指针读取数据是很直观的.然而,这种假设会令编译器无法优化,例如 int foo(int *a,int *b) { *a = ; *b = ; return *a + *b;//不一定是11 } (对以下汇编代码表…
之前使用的是rdesktop,但是由于其不支持NLA认证,便不能登录公司的电脑.为此,现在使用freerdp——这是package的名字,实际的可执行程序是xfreerdp.使用如下的命令行即可实现远程桌面: xfreerdp -u user_name -d domain_name -a 32 -g 1920x1030 -x 0 --fonts --sec nla ip_address 参数解释如下: -u:用户名 -d:域名 -a:使用32位颜色 -g:窗口大小 -x 0:使用LAN模式获得最…
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and bl…
restrict是C99标准中新添加的关键字,对于从C89标准开始起步学习C语言的同学来说(包括我),第一次看到restrict还是相当陌生的.Wikipedia给出的解释如下: In the C programming language, as of the C99 standard, restrict is a keyword that can be used in pointer declarations. The restrict keyword is a declaration of…
参考自restrict restrict解释 restrict关键字出现于C99标准,wiki上的解释restrict from wiki. In the C programming language, as of the C99 standard, restrict is a keyword that can be used in pointer declarations. The restrict keyword is a declaration of intent given by the…
值得注意的是,一旦你决定使用restrict来修饰指针,你必须得保证它们之间不会互相重叠,编译器不会替你检查. 关键字restrict有两个读者.一个是编译器,它告诉编译器可以自由地做一些有关优化的假定.另一个读者是用户,他告诉用户仅使用满足restrict要求的参数.一般,编译器无法检查您是否遵循了这一限制,如果您蔑视它也就是在让自己冒险. 使用restrict的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码 In the C programming language, as…
restrict是C99标准中新添加的关键字,对于从C89标准开始起步学习C语言的同学来说(包括我),第一次看到restrict还是相当陌生的.Wikipedia给出的解释如下: In the C programming language, as of the C99 standard, restrict is a keyword that can be used in pointer declarations. The restrict keyword is a declaration of…