Skip to content

C

关键字sizeof();

计算类型或者变量所占空间的大小

输入函数-scanf(); 后面的括号可以省略

c
//示例,&为取地址的意思,必须加上
scanf("%d %d",&a, &b)
//示例,&为取地址的意思,必须加上
scanf("%d %d",&a, &b)

求字符串的长度-strlen();

是string length 的结合

部分关键字

extern ——声明外部符号,声明作用

register ——寄存器关键字

添加register后,表达的是建议把修饰的变量放到寄存器当中,放不放入寄存器取决于编译器

signed ——有符号的

unsigned ——无符号的

struct ——结构体关键字

描述的是复杂抽象事物,描述复杂类型,类似java中的对象

typedef 类型重定义,也叫类型重命名

c
//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修饰全局变量一样

image-20230917160948981

union 联合体

volatile

预处理指令

#define预处理指令

定义常量

c
//define 定义标识符常量
#define MAX 10000;
int main(){
    printf("%d\n",MAX);
    return 0;
}
//define 定义标识符常量
#define MAX 10000;
int main(){
    printf("%d\n",MAX);
    return 0;
}

定义宏

宏是一种模式替换

c
//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个字节**

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该**内存单元的地址**

指针变量

标志 (*)符号

示例如下:

c
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;
}

解引用操作

c
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;
}

image-20230917172315125

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型,相当于java中的对象

通过struct关键字,结构体可以让C语言创建新的类型出来

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.清理缓冲区

c
#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;
 }
}
c
#include <stdio.h>
//清理缓冲区里的多个字符
while((tmp=getchar()) != '\n')
{
    ;
}
#include <stdio.h>
//清理缓冲区里的多个字符
while((tmp=getchar()) != '\n')
{
    ;
}

> putchar()

——输出一个字符到屏幕上

c
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()

——统计字符串长度

c