逗号表达式

逗号表达式,不常用,安全软件编码中也不允许使用,百科的解释比较到位:

c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14。(a=3*5,a*4)的值是60。

看两个例子就能明白,这两个例子都是告诉我们,逗号运算符的优化级比赋值号还低。

main()
{
    int a, b, c, d;        
    a = 3;
    b = 5;
    c = a, b;
    d = (a, b);
    printf(" c = % d & quot; , c);
    printf(" d = % d & quot; , d);
}
//结果是 3 5

 

main()
{
    int x, y, z;
    x = y = 1;
    z = x++, y++, ++y;
    printf("%d,%d,%d\n", x, y, z);
}
//结果是 2 3 1 

Read More →

指针和数组要深入理解

一直忙于干活,很多知识都遗忘了,遇到一段代码,发现自己的基础太令人捉急了,代码类似于:

main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int *ptr = (int *)(&a + 1);
    printf("%d %d" , *(a + 1), *(ptr - 1));
}

结果应该是2 5,原因在于(int*)(&a+1)这里。


2013/12/10 22:51 update:

指针和数据很多时候混用,但不代表两者相同,另外,很重要的一点,如果一个数组声明为指针时,定为成数组时,如下:

extern int *a;//声明

int a[0] = {0,1};//定义

在使用extern的文件中,若使用a[0]的方式来访问,就会出现错误,原因是编译以声明作为编译的依据,定义可以看作是一种特殊的声明,是分配内存,甚至初始化的功能。用指针去访问数组,存在二次寻址的过程,但是例子中的指针a并不存在一个额外的内存地址用来存放指针变量,所以编译器会把a[0]翻译为,先从a的内容中取内容0,再去寻找存放在地址0内的内容,这显然是不正确的,找不到地址为0的内存。

Read More →

vs2008【断点无效】解决方法

遇到问题,一搜就能搜到,常见问题,MARK,参考:http://www.cnblogs.com/fangyukuan/archive/2010/12/20/1911730.html

在debug下,检查工程配置是否设置正确。 

  1. C++>General->Debug Information Format->Program Database (/Zi)
  2. C++>Optimization->Optimization->Disabled (/Od)
  3. Linker->Debugging->Generate Debug Info->Yes (/DEBUG)
  4. Linker->Debugging->Generate Program Database File->$(TargetDir)$(TargetName).pdb

如果工程配置没问题,请打开:

Tools->Option->debugging->General 找到 Require source files to exactly match the original version 不要打勾

即:工具->选项->调试里->常规 找到 要求原文件与原始版本完全匹配 不要打勾

Read More →

错误的结果2...VC/bin/cl.exe返回的解决方案

研究编译器优化(选择的是完全优化)时,发现的问题,编译不通过,万能的Google一下子就搜到了,看来是常见的问题,参考:

http://blog.csdn.net/mdjtf/article/details/5617292

程序运行时弹出了一个新窗口叫做【输出】,里边写着生成日志保存某个位置,基本是在工程目录下的Debug,打开内容有:

cl: 命令行 error D8016 :“/O2”和“/ZI”命令行选项不兼容
项目 : error PRJ0002 : 错误的结果 2 (从“C:/Program Files/Microsoft Visual Studio 9.0/VC/bin/cl.exe”返回)。

经查是调试信息格式的用于“编辑并继续”的程序数据库(/ZI),改成禁用,继续。

新的错误:cl: 命令行 error D8016 :“/O1”和“/RTC1”命令行选项不兼容,此时将代码生成的基本运行时检查为默认值,就可以了。

Read More →

setjmp和longjmp函数使用详解

看到这两个函数,不认识,没用过,赶紧MARK,参考:

http://blog.csdn.net/chenyiming_1990/article/details/8683413

http://blog.codingnow.com/2010/05/setjmp.html

setjmp和longjmp函数是非局部跳转语句。非局部指的是,这和C语言常见的goto不一样,goto语句在一个函数内实施的跳转,而setjmp和longjmp是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。使用这两上函数比goto还要容易出错,<u>所以不会用在安全软件上,而且也不是C89的标准。</u>

#include <setjmp.h>  
// 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值的longjmp中的val值  
Int setjmp(jmp_buf  env);     

//调用此函数则返回到语句setjmp所在的地方,其中env 就是setjmp中的 env,而val 则是使setjmp的返回值变为val。  
Void longjmp(jmp_buf env,int val); 

当检查到一个错误时,调用longjmp函数(两个参数),第一个参数就是在调用setjmp时所用的env,第二个参数是具有非0值的val,它将成为从setjmp处返回的值。<strong>使用第二个参数的原因是对于一个setjmp可以有多个longjmp。</strong>

下面这个例子简单地讲述了这两个函数是如何使用的:

#include <stdio.h>
#include <setjmp.h>
 
static jmp_buf buf;
 
void second(void) {
    printf("second\n");         // 打印
    longjmp(buf,1);             // 跳回setjmp的调用处 - 使得setjmp返回值为1
}
 
void first(void) {
    second();
    printf("first\n");          // 不可能执行到此行
}
 
int main() {   
    if ( ! setjmp(buf) ) {
        first();                // 进入此行前,setjmp返回0
    } else {                    // 当longjmp跳转回,setjmp返回1,因此进入此行
        printf("main\n");       // 打印
    }
 
    return 0;
}
//程序将输出:
//second
//main

Read More →

桶干燥

长姿势了,桶干燥是这个意思,还以为可以自动烘干,

桶干燥是一种新的改革技术,内桶以770/min左右的转速持续运转30分钟,由于内桶的高速运转,内桶的水珠和盛水桶壁迅速化成水汽,随空气一同排出,有效抑制洗衣桶内的霉菌生长,可防止衣物的二次污染。

Read More →

Mime类型列表

偶尔需要用到,MARK一下,来自:http://baike.baidu.com/view/160611.htm#2

格式前面为后辍名,后面为对应的MIME型(例如:rar application/x-rar-compressed 表示。RAR对应的是application/x-rar-compressed )
application/vnd.lotus-1-2-3
3gp video/3gpp
aab application/x-authoware-bin
aam application/x-authoware-map
aas application/x-authoware-seg
ai application/postscript

Read More →

The Hunger Games: Catching Fire

周五下班后,周末就开始了,看电影成了首选的爱好,最近没有什么好片子的样子,刚看完《地心引力》,余下可看的就不多了,就这部了,《饥饿游戏2》,第一部只看过一半,大致知道是什么剧情,第2部讲什么,直接参考豆瓣吧:

第七十四届饥饿游戏已经结束,凯特尼斯(詹妮弗·劳伦斯 Jennifer Lawrence 饰)和她的“恋人”皮塔(乔什·哈切森 Josh Hutcherson 饰)出人意料地活了下来,劫后重生的恋人凯特尼斯和皮塔接受全民膜拜,原以为将会过上安定闲适的生活。然而,噩梦才刚刚开始。凯特尼斯成为反叛的象征,一股暗流在表面狂欢的气氛下蠢蠢欲动。这一切却正合游戏掌控者心意,号称第75届饥饿游戏的“世纪极限赛”就此展开,一场由历届获胜者组成的选手队伍再陷1人独活的残酷赛制,女主角凯特尼斯身不由己重返战场,生或死、血腥或牺牲在一念之间一触即发。

剧情挺长,也很完整,算是今年看过为数不多的优秀且有内容的剧情片了,不过第2部的意义似乎只是为了让大家期待第3部,准备反击的时候,片子也结束了。

故事就是这么一个故事,但是故事带来的思考是很多的,很多是关于人性方面的思考,也有很多关于社会黑暗面的折射,至少我这么认为吧,或许偏激,或许悲观,或许事实就是如此,一部分人是麻木的,一部分人对生活没有希望,得过且过,也有一部分对动未来充满希望,并且不惜牺牲生命来换得自由。这和鲁迅笔下的血馒头的故事多么相似,有的人把杀头当成是看热闹,麻木不仁,有的人怒不敢言,有的人为了未来,牺牲也不在乎。每一个人都害怕死亡,也很害怕去伤害别人,更何况是夺取别人的性命,但是只有一个人能活,没有选择,这是一个多么可怕,多么残忍,多么变态的游戏!这是在考验人性吗?资源有限的情况下,总归是有Loser的,所以我很想看看理想的共产主义是什么样的。

故事也有爱,为了让自己爱的人活下来,很感人,这份爱带给人们都多的是希望吧,相信下一部女主角将是领袖,带领大家反搞暴政。所以看了第2部的人,很想看第3部,现在电影拍一部还不够,得多拍几部才能让大家多掏几次钱,高端!

最后,对坐在我旁边的那对情侣,说声XXX!,爷看片子的你们唧唧歪歪,卿卿我我,XXX!

老惯性了,发几张剧照,来自豆瓣

Read More →

关于本站

版权说明:本站部分文章非原创,来源于网络,一般会标记出处,但也有可能遗漏,如有侵权,请联系我删除。

最近关注上海干部在线学习,有需要右侧二维码扫一扫联系我吧。

其它暂时没想到要写什么,日志下面也可以留言。

Read More →

遗失的美好

吃完饭,想起这首歌,好像有点伤感,原因说不清,休息一下,一会儿就好了~~

海的思念绵延不绝
终于和天 在地平线交会
爱如果走得够远
应该也会跟幸福相见
承诺常常很像蝴蝶
美丽的飞盘旋然后不见
但我相信你给我的誓言
就像一定会来的春天
我始终带着你爱的微笑
一路上寻找我遗失的美好
...

Read More →
在线学习答案查询入口
微信扫一扫
微信扫码联系