- char数组类型
1. C没有为字符串定义专门的变量类型,而把它存在char数组中。
2. 字符串存储时通常以这个空字符\0结束,意味着数组的单元数必须至少比要存储的字符数多1,这个操作由系统完成。
3. 字符串常量"X"和字符常量'X'的区别:其实"X"由两个字符组成。
- printf
1. 打印%符号,用%%标识
2. 字符宽度设置,和fortran有很大的区别,fortran是设置了最大宽度,超过就会显示*,而C是超过了会自动调整,例如:
#include <stdio.h>
#define PAGES 732
int main(void) { printf("*%d*\n", PAGES); //默认生成与要打印的整数同宽度的字段。 printf("*%2d*\n", PAGES); //如果设定的字段不能容纳要打印的数,字段会自动扩展以适应数字的长度。 printf("*%10d*\n", PAGES); //否则产生设定长度的字段。 printf("*%5.3d**%05.3d*", 6, 6); //.3将产生足够多的前导0填满要求的最小数字位数;同时使用0和.那么0会忽略掉
}
输出结果:
*732* *732* * 732* * 006** 006*
3. 对于字符串来说,格式说明符.5表示只能打印5个字符,其他用空格填充。
4. 当被用作printf()的参数时, float被转换成double。
5. 拆分字符串,可以采用printf(“abdc" "aasdf");中间用空白字符连接,也可用于换行。
- scanf
1. 如果是读取某种基本变量类型,请在变量名前加&;如果是将字符串读进一个字符数组中,请不要使用&。
2. 使用空白字符(空格、换行、制表)作为分割。
3. 转换说明字符与printf几乎相同。主要区别在于printf把%f,%e,%E,%g,%G同时用于float和double,而scanf只把它们用于float,而用于double时要求使用l修饰符,例如%lf, %le等。
4. *修饰符在printf和scanf中的不同
int width = 6; int precision = 3; int number = 100; float weight = 24.5; printf("%*d\n", width, number); //提供宽度 printf("%*.*f\n", width, precision, weight); //提供宽度和精度
int n; scanf("%*d %*d %d", &n); //此时,输入3个数,前两个数会被跳过 //如果程序需要读取一个文件中的某一特定列,会有用
5. 一个例子
假定有输入行: -13.45e12# 0
如果使用%d,scanf会读取3个字符(-13)并在小数点处停止,将小数点作为下一个输入字符;
如果使用%f,scanf会读取-13.45e12并在#处停止;
如果使用%s,scanf会读取-13.45e12#并在空格处停止。
6. scanf会把读入的东西先写入buffer里,然后按照格式取出,如果你第一个scanf读入了两个东西,例如abc cd,那第二个scanf就会取出cd。
- sizeof运算符和size_t类型
sizeof是以字节为单位返回其操作数的大小,size_t通过创建别名的机制,来选择适合的类型。例如:
size_t intsize; intsize = sizeof(int); printf("%zd bytes", intsize);
- 类型转换
1. 当出现在表达式中时,将char型自动转换成int;
2. 当作为函数参数传递时,char会被转换为int,float会被转换为double;
3. 另外可以指派运算符,例如:(int) 1.6,(float) 1。
- ++a和a++
当n++是表达式的一部分时,可以认为它表示”先使用n;然后再将它的值增加“;
当++n是表达式的一部分时,可以认为它表示”先将n的值增加;然后再使用它“;
- C风格的读循环-成功读入某一类型的数
while(scanf("%ld", &num) == 1) { //loop actions }
- =和==
如果进行比较的双方有一个是常量,可以把它放在左边,例如: 5 == a,这样如果写成5=a可以被编译器识别。
- 运算优先级(从高到低)
( ) W - + ++ -- sizeof (type) W * / % W + - W < > <= >= W == != W =
- for循环
1. 第一个表达式在循环开始的时候执行一次;第二个表达式在每次循环之前都要进行求值,若假则循环结束;第三个表达式在每次循环结束时进行计算。
- 逗号运算符
保证最左边的表达式最先计算,整个表达式的值是右边表达式的值,例如:x = (1, 2);得到x==2,而且逗号的优先级要小于=,所以a=1, 2等价于a=1;2;