关闭

开篇---c 复习小结

标签: 编译器语言functionfloatunixgcc
515人阅读 评论(0) 收藏 举报
刚看了程序设计语言排名,java第一,c第二,噢噢,偶最常用的两个语言,舒服
最近要找工作,所以打算系统的复习一下c语言,看了几个晚上,做一下笔记。
1.函数声明:为了跟古老的c声明兼容,如果声明函数时没有加参数那么编译器会关闭参数检查,如果参数为空,请加void ,另外编译器在第一次看到一个函数调用时会为这个函数生成一个默认的声明。
2.函数的返回值:c语言的任何一个函数都可以不写return,gcc下连警告都不会生成,"it is possible to return from a function by falling through the last }, unless the function returns void an unknown value will be returned, resulting in undefined behaviour."
3.类型转换:这玩意还真是不好记,我也懒得去去记,就按照短字节---》长字节, 范围小--》范围大来转。例如int和float肯定是int被变成float, unsigned 到signed。 刚才看了一个题,说是如何判断一个数是无符号还是有符号,我的答案是把这个数与-1相加,根据结果就可以判断着了
4.sizeof:记住,sizeof是编译时求的值
5.常量字符串,readonly,这年头这个考的还真是不少
6.程序块:c用一对{}来定义程序块,一个程序块的开头处可以定义变量,程序块里的变量会覆盖块外的同名变量
7.regesiter变量不能取地址
8.指针数组与数组指针:前者是一个数组里放的是指针,后者是一个数组里放的是变量,前几天还犯了个错误:一个数组,里面放的是子类的对象,然后用父类的指针去操作这个数组,还++,惨...
9.结构和对齐, 空结构的的大小==0,对齐win和unix不一样
10.typedef,extern,static以及define,前三者差不多,是编译时的定义,define是预编译的
11.可变参数与函数调用的规则,stdcall,cdelcall...
12.字符串的类型为数组,存储类为static,所以sizeof(“123456”) = 7!
13.宏定义里的#,##:#用于表达“name”,##用于连接名字,例如define M1(k) #k  ,
  则M1("12345")   = "/"12345/""  M1(12345) = "12345"
 #define M2(k) k##M  则M2(1) = 1M
14. 数组T a[len],a  is a pointer  to T, but &a is a pointer to an array of T. so a + 1 = addr(a) + sizeof(T), &a + 1 = addr(a) + sizeof(T)*len

待续...
0
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:124332次
    • 积分:1941
    • 等级:
    • 排名:千里之外
    • 原创:69篇
    • 转载:2篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论