C语言杂七杂八总结

  1. 如果某个算数运算符中有一个浮点操作数一个整形操作数,则运算之前整形将被转换成浮点型
  2. 在printf语句第一个参数%d中指明打印宽度,打印数字会在打印区域右对齐
  3. c = getchar() 这种操作是一个表达式,也具有一个值,就是赋值后变量C的值
  4. EOF=-1  WINDOWS下用ctrl+z输入
  5. 对于char型而言,当其值>127也就是最高位为1,那么最高位代表符号位,所以整个值为负,当其<=127时,最高位默认为0,其值为正,因此其表示范围为-127-127
  6. !为逻辑取反,非零则为1,~为按位去反
  7. ‘\n’是单个字符,在表达式中是一个整形数,而“\n”则是一个仅包含一个字符的字符串常量
  8. 赋值语句结合次序为从右至左,也就是说A=B=C=0 相当于 (A=(B=(C=0)))都是合法的,也就是说A=B这个表达式也是有返回值的,值就是B的值
  9. 函数声明中,int power(int,int)也是合法的,但是不推荐
  10. 自动变量=局部变量
  11. 如果程序包含在多个文件中,某个变量在1文件中被定义,而在2,3文件中被使用,而文件1,2,3 执行次序又不一定,那么就需要在2,3中使用extern定义
  12. 定义与声明:定义变量或者分配存储单元,但是声明只是说明变量性质,并不分配存储单元
  13. 传统C语言用法,变量用小写,符号常量名用大写字母
  14. long类型的常量以字母l或者L结尾,unsigned long则以ul或者UL结尾,例如123456789L
  15. 浮点数长两种包含一个小数点如1.2或者指数如1e-2也可以两者都有。没有后缀的浮点数常量是double型,后缀f或F表示float型,而l或者L表示long double型
  16. 8进制前缀为0,16进制前缀为0x,如31可以写成037或者0X1F,也可以加后缀L或者U,例如0XFUL表示一个无符号long类型常量,15
  17. ’\ooo‘,ooo表示1-3个八进制数字 ’\xhh‘ hh表示一个活多个16进制数字
  18. const限定变量不可能改,const数组也一样,int strlen(const char[]),函数不能改变数组值
  19. 闰年 能被4整除,但不能被100整除,或者能被400整除
  20. && ||连接的表达式在结果值可以确定后立即停止计算
  21. 类型转换可以把窄的专为宽的,但是反过来变异不会报错,只会给警告
  22. if i=3; printf(i++)=3    printf(++i)=5 但是在不需要使用具体值情况下,例如x++或者x--等同
  23. 对无符号数进行右移位时,空出部分用0填补,但是对于signed类型,有的机器用符号位填补,有的机器用0,而且移位是针对二进制而言,而不是十进制
  24. 三目运算符(n>0)?float:int ,结果为float型,与强制类型转换类似,只能变宽
  25. C语言中x=f()+g(),f g函数计算顺序是不一定的,当f g函数存在数据依赖或者共享时候,则需要将中间结果存于临时变量之中,类似的是printf(%d%d,++n,power(2,n))也是有可能出问题的
  26. a[i]=i++;数组i下标值与机器有关。
  27. ,用于多步计算的宏或者元素交换也是可以的,例如:a=b,b=c,c=a;
  28. continue语句只能用于循环语句,不能用于switch
  29. 空函数 例如 dump(){} 是无参数,无操作的函数
  30. 外部变量或函数的作用于从声明的地方开始,到其所在文件的末尾结束 P68,例如extern int i;这只是一个声明,定义一个外部变量在某个文件中只能出现一次,而其他文件可以通过extern声明访问它
  31. getchar()将获取的字符放入缓冲区,直到回车的出现,才返回函数值,此返回值会直接显示到屏幕;getch()是直接返回函数值,而不等待回车的出现

  32. 用static声明限定外部对象,是这个外部变量作用于限定问被编译源文件的剩余部分,也就是这个文件内部的“外部变量”,static类型的内部变量是一种只能在某个特定函数中使用但一直占据存储空间的变量,这个变量只被初始化一次
  33. 对于外部变量和静态变量,没有显示初始化时时将被自动初始化为0,且只初始化一次,表达式必须为常量表达式
  34. 对于自动变量和寄存器变量,初值则没有被定义,且表达式可以包含此前已经定义的任何值,包括函数调用
  35. 对于一个数组的初始化,如果初始化表达式中元素个数比数组元素少,则对外部变量,静态变量和自动变量来说,没有初始化表达式的元素将被初始化为0,如果元素比数组多,则为错误
  36. 快速排序中,将比轴值小的放一边,大的放另一边的办法:  1 从J=N开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于轴值的值,两者交换;2 从I=1开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于轴值的值,两者交换;重复1,2直到J=I;
  37. include ' ',为在源文件当前位置找该文件
  38. 宏定义的替换只对记号进行,对括号内的字符串不起作用,例如,define YES, printf(YES)或者YESMAN都不执行替换
  39. 当宏定义比较长需要换行,加一个\
  40. #undef指令取消名字的宏定义,这样做可以保证后续的调用时函数调用而不是宏调用
  41. #define的替换文本中,参数名以#为前缀的,将由实际参数替换
  42. #define a(X,Y) X ## Y ,调用时a(1,2)将用于连接两个参数,结果为12;
  43. 指针只能作用对内存中的对象,即变量与数组元素,不能作用于表达式,常量或者register类型的变量
  44. 在数组与指针之间,将指针赋值给数组名是非法的,将数组名++也是非法的
  45. 当一个函数中间一个指针被作为参数传递进入调用函数中,并在其内发生变化,不会影响原来函数中的指针
  46. size_t由运算符sizeof返回的无符号整型
  47. 所有指针算术运算必须考虑所指对象的长度
  48. 指针与整数之间不能相互转换,但是0是唯一的例外,0可以赋值给指针,也可以相互比较,(NULL)
  49. char *p=”12345“  “12345”如果用printf打出来的话,实际上接受的是指向字符数组的第一个字符的指针;编译没问题,但是运行会报错,这是因为,”12345“是字符串常量,存与内存的常量区,本身用一个可变的指针指向他就是有问题的。要加const P90
  50. !!!内存对于C语言来说主要分为以下几个类别:STACK:存放函数的参数值,局部变量的值。HEAP:由程序员自己分配和释放。全局区:static,全局变量与静态变量存放在一块,经过初始化的在一块,未经过初始化的在另一块。文字常量区:常量字符串。程序代码区:存放函数体的二进制代码 P92
  51. char *a[1000]:是一个指针数组,其数组的每个元素都是一个指向字符类型对象的指针,可以被初始化*a[]={"123","2345","12356"}指向不定长度的字符串,这是与二维数组的区别
  52. 当一个函数要返回两个参数时,可将这两个参数的指针作为参数传入
  53. 字典顺序与数值顺序:字典顺序就是ASC码顺序
  54. argc参数计数 argv[],参数向量,指向字符串数组的指针,argv[0]存的是启动该程序的程序名,因此argc>1
  55. 函数指针:int (*com)(void *,void *);com是一个指向函数的指针,具有两个void *类型参数,其返回值为int,*com代表一个函数
  56. 函数名是一个函数指针常量,而FunP是一个函数数指针变量,这是它们的关系
  57. 结构  struct point{ int x;int y;};  point为结构标示,标示这种结构,声明可以用如下格式 struct point pt;那么就定义了一个名为pt的point类型结构体,可以通过初值表进行,例如:struct point pt={12,34}.
  58. j结构可以被整体赋值和复制,通过&取址,当参数或者返回值,但是!!!!结构不能相互比较!!!
  59. sizeof运算符是在编译时计算对象存储空间字符数,在#if条件编译中,预处理器不能与其进行分析
  60. 两个指针加法是违法的,减法是可以的
  61. 在结构体中,例如一个结构体含有一个char 一个int 那么其要占用8个字节存储空间,而不是5个,但是sizeof运算符能正确返回5
  62. typedef声明并没有创建一个新类型,只是为某个存在的类型增加一个新的名称而已
  63. exit(1)表示进程正常退出. 返回 1; exit(0)表示进程非正常退出. 返回 0.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值