- 1个字节由8位比特位(0/1)组成
- 数据占据的空间越大,表示数字的范围越大
笔试:
char数据类型占几个字节?
在32位windows系统下,占1个字节(附加前提)
- 字符串不是类型,通过字符数组表示字符串
- 若局部变量与全局变量命名冲突,则局部覆盖全局
- 作用域:变量在哪些代码范围中有效
- 生命周期:何时销毁(释放)占用内存
- 常量:
a.字面常量
b.const修饰的常量(不可修改)
c.#define定义的常量
d.枚举常量 eg:
enum Sex
{
male = 5, //5 表示整数
female //0 枚举默认从0开始
};
- 数组
把一组类型相同的变量放在一起,通过[ ]的方式取出数组中的第N个元素(从零开始计数,N成为数组下标/数组索引)
访问数组下标时,必须保证下标在有效范围之内[0,size),若下标超出有效范围,此时程序就是“未定义行为”。
- 字符串
把一堆字符字符放在一起(字符数组)
字符串字面值
- 转义字符
#include <stdio.h>
#include <stdlib.h>
int main(){
// 打印目录c:\test.c
printf("c:\test.c"); //错误的写法 \t会被当做转义字符,以制表符的形式打印
//正确写法
printf("c:\\test.c");
system("pause");
return 0;
}
笔试:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
printf("%d\n", strlen("c:\test\32\test.c"));
system("pause");
return 0;
}
\32(ASCII值为32的字符)和两个\t被解析成一个转义字符,打印的结果为:
- 函数:
输入一些数据,返回一些结果
函数定义时,参数x、y叫做形参
函数调用时,按照参数的顺序把实参的内容传到对应的形参中
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Add(int x,int y){
return x+y;
}
int main(){
int sum=Add(10,20);
printf("sum=%d\n",sum);
system("pause");
return 0;
}
- typedef:类型定义/类型重命名
- static用法:
修饰局部变量时,局部变量的生命周期变为全局的生命周期,但是其并不影响变量的作用域
修饰全局变量时,全局变量的作用域仅限于当前.c文件
修饰函数时,函数的作用域仅限于当前.c文件中使用
- 全局变命名时,建议使用g_前缀
- extern:声明变量、函数(声明函数时,可加可不加)
- #define 宏:在C语言中相当于“文本替换”
- 指针
保存的数据含义是内存的一个地址,指针完全可以当做一个普通的整数,该整数具有的特定含义——内存上的地址
随机访问:闪现。以极低的成本访问内存任何一个地址上的数据
eg: int* p =&a;(int* 基本变量类型)
p变量的类型是指针,存的内容为地址;int类型的指针地址中的内容是一个int类型的变量
在32位系统下,一个指针大小占4个字节;在64位系统下,一个指针大小占8个字节;
- 结构体
本质上是自定制类型,其含义根据具体的应用场景决定,自定制结构体中的内容由内置类型/其他自定制类型构成
#include <stdio.h>
#include <stdlib.h>
struct Student{
//结构体中包含的成员/属性
char name[1024]; //1024Bytes=1KB
int age;
};
int main(){
struct Student zhang{"张三",20};
struct Student li{"李四",30};
printf("%s,%s\n",zhang.name,li.name); //zhang.name中的. 取结构体中的某一个成员/属性
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct Student{
//结构体中包含的成员/属性
char name[1024]; //1024Bytes=1KB
int age;
} Stu;
int main(){
Stu zhang{"张三",20};
Stu li{"李四",30};
printf("%s,%s\n",zhang.name,li.name); //zhang.name中的. 取结构体中的某一个成员/属性
system("pause");
return 0;
}
以上两种程序是等价的,可用typedef将结构体重新命名。