C备忘笔记
2015-07-14 09:28
309 查看
main(){ ... }函数是一个特殊的函数,并不需要参数。
格式符:
%d按照十进制整型数打印
%ld长整型
%6d按照十进制整型数打印,至少6个字符宽
%f浮点数打印
%.2f浮点数,小数点后有两位
%3.2f浮点数,小数点后有两位,占3个字符宽
%o8进制
%x16进制
%%表示%号本身
符号常量:
符号常量大写,语句结尾无需分号。#define NUMBER 10
限定符const
const cant_modified = 'always';其值将不能被修改。
字符输入输出getchar putchar
EOF(end of file),定义在stdio.h中,是个constant,一个整型数。
在没有输入时,getchar将返回一个特殊值,被称为EOF。
#include <stdio.h> main(){ int c; c = getchar(); while (c != EOF){ putchar(c); c = getchar(); } } /* simplify edition */ main(){ int c; while ((c = getchar()) != EOF){ putchar(c); } }
类型转换
赋值时也需要进行类型转换,赋值运算符右边的值需要转换为左边变量的类型,左边变量的类型即赋值表达式结果的类型。把较长的整数转换为较短的整数或char类型时,超出的高位部分将被丢弃。
int i; char c; i = c; c = i;
执行后,c的值将保持不变。但是如果反过来,把高位的转换为低位,则有可能丢弃超出的高位部分。
所以当
float f;转换为
int i;,即
i = f;,小数部分将被舍弃,是进行四舍五入还是舍弃取决于具体的实现。
强制类型转换
在任何表达式中都可使用强制类型转换:(类型名) 表达式Note:强制类型转换只是生成一个指定的n的值,n本身的值并没有变。强制类型运算符和其他一元运算符优先级相同。
#include <math.h> sqrt((double) n) /* 2将被自动转换为2.0 */ duble sqrt2(double); root = sqrt2(2);
单双引号
C中单双引号是有区别的,单引号中表示字符,而双引号表示字符串。因此
'a'表示字符, 在ASCII码中对应数字为97 。
printf("%d\n", 'a'); /* 将会打印97 */
自增自减,前缀后缀的区别
如果单单是用在变量上,两者最后结果是一样的:如n++和
++n结果是一样的。 但是前缀和后缀在C中还是有区别的:
++n表示先将n的值递增1;
n++表示先使用变量n的值,再将n值递增1。
所以,如果n的值为10:
x = n++;x的值还是10,n为11
x = ++n;x的值为11,n为11
表达式
(a+b)++是非法的。
#include <stdio.h> main(){ char a[] = "wha"; int n = 2; a[n++] = 't'; a[n++] = '\0' printf("%s\n", a); }
结果为: wht
(
'\0'为字符串结束符号)
n=2, a[n++] = 't'后缀自增此时最先作用的其实是
a = 't', 之后n才会做自增。
函数
placeholder() {}像这样什么不执行任何操作,不返回任何值的空函数一般用来做预留。
如果函数定义中省略了返回值类型,则默认认为 int 类型。
三元操作符
int a, b, samll; a = 10; b = 20; small = (a < b) ? a: b; /* like python: small = b if a > b else a */
相关文章推荐
- CALayer1-简介
- event模块底层各种事件机制
- nginx-----http配置的解析
- SparkR后台进程的bug
- Android 开发 之 Fragment 详解
- 匹配文本中的网址java正则表达式
- HDU 2570 迷瘴
- ScrollView子控件高度设置无效
- java学习
- HDU 2079-课程时间(生成函数)
- LeetCode Search for a Range(二分法)
- 线程间操作无效:从不是创建控件 listbox1 的线程访问它.
- js中浮点型运算 注意点
- 类库引用EF
- java树形菜单
- http错误代码表
- The 3D Analyst extension has not been enabled.
- 霓虹灯(跑马灯、方框赛跑)
- HDU 1249 三角形
- OS X 10.11 安装Cocoapods 出现问题的解决方法