C语言阶段——需要注意的小细节
持续更新。。。。。。。
1. int a;
定义全局变量 如果不给初值 系统自动给a赋0
但定义局部变量时 如果不给初值 就是一个随机值
2.scanf()函数 里 别放多余的东西 就放一个标准输入格式符就好
试一试:
scanf("%f\n", &temp1);
scanf("%lf\n", &temp2);
就知道了
3.逗号表达式作为一个整体,从左到右逐个计算;它的值为最后一个表达式的值;
逗号表达式的优先级在所有运算符中最低。
4.赋值表达式 = *= -= /= 运算顺序是从右往左运算
例如 int temp = 2; if( x= 2 * temp = 3 ) …… 首先算2 * temp 得常数 4, 4 = 3 语法错误 x仍然没有赋值
优先级:! 算术符 关系符 && || 赋值 逗号
5. 假设a 的初值为2 运算完 a 的值为多少? a 为 2 原因: 第一个if 没有加 {} 没有标明作用域
6. Ubuntu启动出错 启动不了 可以试一下 删除下面两个文件夹
至于为什么 我不知道。。 大家也可以评论告诉我。。。
7. C语言中 0 == '\0' == NULL != '0' == 48
8. '\n' sizeof('\n') 的结果为4 ==> 为什么? '\n' 字符型占用一个字节没错
但是'\n'的值是整型的ASCAII值 10 所以 sizeof(10) 结果为 4
sizeof() 虽然长得像函数 但其实 是运算符
typeof( '1' ) 同理 他代表的类型并不是char 而是 int 原因就是函数
处理的时候把 '1' 转换成整型数字 49 处理了
9.前置++ 后置++
10.等价的表达式
11.数据在内存中的储存形式 整型 : 数据的补码存储 浮点型: 数据的补码存储
字符型: 按字符的ASCII码存储 有疑问看第8点
有符号:按数据的补码存储
无符号型:按数据的源码存储
有符号数据的表示 最小值在内存中的存储 符号位为 1 其他位为0
最大值在内存中的存储 符号位为 0 其他位为1
12. "\\\065a,\n"
字符串长度为? 5
分析下:"\\\065a,\n"第一个字符\\,第一个\表示转义,
第二个\代表该字符第二个字符\065,八进制表达(有点凑巧啊)
第三个字符a
第四个字符,
第五个字符\n
所以答案是5
13.
%s打印字符串 后接地址 %c打印字符 接值
char ch[] = "123456"; //系统给常量ch指向的变量数组 分配内存空间存 字符串"123456"
char *str = "abcdef"; //系统给变量str 分配内存空间存 常量字符串"123456"的地址
注意:变量的值可以变 但是常量的值不可改变
也就是说 变量数组 的值"123456"可以变
变量str的值(存放的地址)可以变成另外的地址
但是常量指针ch的指向不可更改 常量字符串"abcdef"不可更改
14.
15.
16.
17.
18.
19.
20.