《程序员面试笔试宝典》C知识归纳

来源:互联网 发布:英语基础自学软件 编辑:程序博客网 时间:2024/04/28 07:28

ASSERT()是一个调试程序时经常使用的宏,用于捕获非法情况。定义在<assert.h>头文件中,计算括号内表达式的值,值为false(0),报告错误,终止运行。ASSERT()只在Debug版本中有,编译的Release版本则被忽略。ASSERT()是宏,assert()是ANSIC标准中规定的函数,类似ASSERT(),但是可以用在Release版本中。在包含#include<assert.h>前加上#define NDEBUG禁用assert()调用。

//////////////////////////////////////////////////////////////////////////////////////////// 

i++ = 5;不可赋值,++i = 5;可以赋值。i++表示取i地址,把值放入寄存器,然后对内存中的i加1。++i表示取i地址,对内容加1,放入寄存器。这里的寄存器里存的应该就是计算时取的值,所以计算时哪怕a = 1+(i++);这样加了括号,和a = 1+i++;也没有区别,最后的a都是用i在寄存器中的值计算后赋的值。

//////////////////////////////////////////////////////////////////////////////////////////// 

使用伪指令#pragma pack(n),C编译器将按照n个字节对齐。#pragma pack(n)取消自定义字节对齐方式。_attribute((aligned(n)))让所作用的结构成员对齐在n字节自然边界上。结构中成员大于n,则按照最大成员长度来对齐。_attribute_((packed))取消结构在编译过程中的优化对齐,按照实际占用字节数对齐。

当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

void fun(char a[100])

{

//sizeof(a)=4;

}

//////////////////////////////////////////////////////////////////////////////////////////// 

0 0
原创粉丝点击