1、每种类型的大小是多少?
2、当局部变量和全局变量同名时,局部变量优先使用
3、C类型:
4、大小端:
大端:低位数据存储在高地址
小端:低位数据存储在低地址
Eg: 十进制100的二进制为00(高位数据) 00 00 64(低位数据)
地址:【低地址】【 】【 】【高地址】
5、存储负数:补码
源码
反码:源码取反
补码:反码加一
6、常量:C语言中的常量分为以下几种:
- 字面常量
- Const修饰的常变量
- #define定义的标识符常量
- 枚举常量
#include
//举例
enum Sex
{
MALE,
FEMALE,
SECRET };
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
3.14;//字面常量
1000;//字面常量
const float pai = 3.14f; //const 修饰的常量
pai = 5.14; //pai还是3.14不可修改
#define MAX 100 //#define的标识符常量
return 0;
}
7、转义字符:
在屏幕上打印一个‘打印一个“怎么做?
#include<stdio.h>
int main()
{
printf("%c\n", '\'');
printf("%s\n", "\"");
return 0;
}
8、关键字typedef:是类型定义,这里应该理解为类型重命名。
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}
9、建议for语句的循环控制变量采用“前闭后开区间”写法。
10、
该程序for循环一次也不执行,因为在for循环中,在判断语句中,给k赋值为0,即k为假(c语言中,0为假,非零为真),所以不进入循环。
11、 static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
12、一个全局变量/函数被static修饰,使得这个全局变量/函数只能在本源文件内使用,不能在其他源文件内使用。
13、每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break。
14、break在循环中的作用 :while中的break是用于永久终止循环的。
15、ASCII的本质是编号
16、为什么要有补码?
方便用加法实现减法运算。
17、负数怎么求补码?
除符号位外,按位取反,末位加一。
正数的补码是其本身。
18、数据类型:识别方式和长度.
19、函数的参数
- 实际参数(实参): 真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进 行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
- 形式参数(形参): 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元), 所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
20、函数的调用
传值调用 函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。所以我们可以简 单的认为:形参实例化之后其实相当于实参的一份临时拷贝。
21、数组:
随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得出结论:数 组在内存中是连续存放的。二维数组在内存中也是连续存储的。
22、逗号表达式:
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
23、指针:
指针就是变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。指针的大小在32位平台是4个字节,在64位平台是8个字节。
24、结构体:
函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销 比较大,所以会导致性能的下降。 所以,结构体传参的时候,要传结构体的地址。