C
关键字sizeof();
计算类型或者变量所占空间的大小
输入函数-scanf(); 后面的括号可以省略
//示例,&为取地址的意思,必须加上
scanf("%d %d",&a, &b)//示例,&为取地址的意思,必须加上
scanf("%d %d",&a, &b)求字符串的长度-strlen();
是string length 的结合
部分关键字
extern ——声明外部符号,声明作用
register ——寄存器关键字
添加register后,表达的是建议把修饰的变量放到寄存器当中,放不放入寄存器取决于编译器
signed ——有符号的
unsigned ——无符号的
struct ——结构体关键字
描述的是复杂抽象事物,描述复杂类型,类似java中的对象
typedef 类型重定义,也叫类型重命名
//TODO typedef
//类型重定义,类型重命令,通俗点就是另起个名字
//例如下列就是将 unsigned int 重命名为u_int ,效用等同于 unsigned int
typedef unsigned int u_int;
int main() {
//下列两段代码的效用是一模一样的
unsigned int num1 = 100;
u_int num2 = 100;
return 0;
}//TODO typedef
//类型重定义,类型重命令,通俗点就是另起个名字
//例如下列就是将 unsigned int 重命名为u_int ,效用等同于 unsigned int
typedef unsigned int u_int;
int main() {
//下列两段代码的效用是一模一样的
unsigned int num1 = 100;
u_int num2 = 100;
return 0;
}static 静态的
作用:
- 修饰局部变量--改变的是局部变量的生命周期**(本质上是改变了变量的存储类型)**
- 修饰全局变量--修饰全局变量,使得这个全局变量只能在自己的源文件(.c)内部中使用,其它源文件无法使用,extern也无法调用
- 修饰函数--static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用(本质上,static是将函数的外部链接属性变成了内部链接属性,和static修饰全局变量一样)

union 联合体
volatile
预处理指令
#define预处理指令
定义常量
//define 定义标识符常量
#define MAX 10000;
int main(){
printf("%d\n",MAX);
return 0;
}//define 定义标识符常量
#define MAX 10000;
int main(){
printf("%d\n",MAX);
return 0;
}定义宏
宏是一种模式替换
//define 定义宏
#define ADD(x,y) ((x)+(y))
int main(){
printf("%d\n",ADD(2,3));
return 0;
}//define 定义宏
#define ADD(x,y) ((x)+(y))
int main(){
printf("%d\n",ADD(2,3));
return 0;
}#include预处理指令
比较重要的东西,必看
常量定义
- 字面常量
- **const**修饰的常变量
- **#define**定义的标识符常量
- **enum枚举**常量
全局变量:在其他源文件内部可以被使用,是以为全局变量具有外部链接属性
但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了
指针初识
指针就是地址
指针的大小是相同的,指针需要多大空间,取决于地址的存储需要
指针大小在32位平台是4个字节,64位平台是8个字节
内存
内存是电脑上特别重要的存储器,计算机中所有的程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是**1个字节**
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该**内存单元的地址**
指针变量
标志 (*)符号
示例如下:
int main()
{
int a = 10;//a在内存中要分配空间的 - 4 个字节
printf("%p\n",&a);//%p专门用来打印地址的
int* pa = &a;//pa是用来存放地址的,在c语言中pa叫是指针变量
//* 说明 pa是指针变量
//int 说明pa执行的对象是int类型的
return 0;
}int main()
{
int a = 10;//a在内存中要分配空间的 - 4 个字节
printf("%p\n",&a);//%p专门用来打印地址的
int* pa = &a;//pa是用来存放地址的,在c语言中pa叫是指针变量
//* 说明 pa是指针变量
//int 说明pa执行的对象是int类型的
return 0;
}解引用操作
int main()
{
int num = 10;
int *p = #
*p = 20; //解引用操作,对pa解引用,使得p通过自身存储的地址找到num,并间接改变了num的值
printf("%d",num);
return 0;
}int main()
{
int num = 10;
int *p = #
*p = 20; //解引用操作,对pa解引用,使得p通过自身存储的地址找到num,并间接改变了num的值
printf("%d",num);
return 0;
}
结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型,相当于java中的对象
通过struct关键字,结构体可以让C语言创建新的类型出来
//例如创建学生类型
struct Stu
{
char name[20];
int age;
double score;
};
int main()
{
struct Stu s = { "张三",20,85.5 }; //结构体的创建和初始化
printf("%s %d %lf\n", s.name, s.age, s.score);
struct Stu* ps = &s;
printf("%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);
//第三种打印方法
printf("%s %d %lf\n", ps->age, ps->age, ps->score);//箭头左边一定是结构体指针本身
}//例如创建学生类型
struct Stu
{
char name[20];
int age;
double score;
};
int main()
{
struct Stu s = { "张三",20,85.5 }; //结构体的创建和初始化
printf("%s %d %lf\n", s.name, s.age, s.score);
struct Stu* ps = &s;
printf("%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);
//第三种打印方法
printf("%s %d %lf\n", ps->age, ps->age, ps->score);//箭头左边一定是结构体指针本身
}EOF
—— end -of file 文件结束标志
一些函数
> getchar()
——1.获取当前输入的字符
——2.清理缓冲区
#include <stdio.h>
int main()
{
int ch;
while((ch)=getchar() != EOF){//当字符不是EOF时,获取当前输入的字符
putchar(ch);
return 0;
}
}#include <stdio.h>
int main()
{
int ch;
while((ch)=getchar() != EOF){//当字符不是EOF时,获取当前输入的字符
putchar(ch);
return 0;
}
}#include <stdio.h>
//清理缓冲区里的多个字符
while((tmp=getchar()) != '\n')
{
;
}#include <stdio.h>
//清理缓冲区里的多个字符
while((tmp=getchar()) != '\n')
{
;
}> putchar()
——输出一个字符到屏幕上
int main()
{
int ch;
while((ch)=getchar() != EOF){
putchar(ch);//输出一个字符到屏幕上
return 0;
}
}int main()
{
int ch;
while((ch)=getchar() != EOF){
putchar(ch);//输出一个字符到屏幕上
return 0;
}
}> strlen()
——统计字符串长度