初识C语言

编辑器和编译器的区别
编辑器:只具备写入的功能
编译器:不仅具有写入的功能,还能将内容翻译成计算机能读懂的文件

 

解释性语言和编译性语言的区别
解释性语言:好比与口头翻译,别人说一句翻译一句;在代码中就是一边运行一边翻译成计算机知道的语言
编译性语言:好比与书面翻译,英文翻译成中文并写在纸上;在代码中就是将代码文件先翻译成计算机语言文件,然后执行计算机语言文件

 

数据类型

char 字符型 1字节
short 短整型 2字节
int 整型 4字节
long 长整型 4字节
long long 更长整型 8字节
float 单精度浮点型 4字节
double 双精度浮点型 8字节

 

变量与常量
不变的值叫做常量(一天的时间,π),可变的值叫做变量(身高,体重)

全局变量:函数外部定义的变量
局部变量:函数内部定义的变量
注:当全局变量和局部变量的变量名相同时,使用变量名时采用就近原则,即局部变量优先。

全局变量和局部变量的作用域
全局变量:整个项目
局部变量:变量所在的局部范围

全局变量和局部变量的生命周期
全局变量:整个程序的声明周期就是全局变量的生命周期
局部变量:进入作用域生命周期开始,退出作用域生命周期结束

常量——(字面常量、const常变量、#define标识符常量、枚举常量)
字面常量:什么语法也没有,写上就是;
const修饰的常变量:例const int a = 10; 本质是一个变量,但具有常量的属性不能被修改

 

字符串
字符串""在C语言中没有对应的数据类型,想要存放就需要使用char arr[] = xxx; 字符类型数组去存放字符串中的元素
注:在监视时会发现数组中的最后一个元素是\0;\0是字符串的结束标志的转移字符,在计算字符串的内存空间会被计算在内,但是计算长度和显示都不会出现。
在使用字符串变脸时,一定会要注意是否有\0结束转移字符,如果没有可能会出现意想不到的错误。
需要值得关注的地方char arr[] = {'a','b','c','d'};   使用%c的格式化打印没有问题,但是使用%s的格式化打印会出现问题,因为想要表达的意思不一样,%c是字符,%s是字符串,字符串需要\0结束

 

转义字符——转变字符的意思   
\字符{?, ', ", \, a, b, f, n, r, t, v, ddd, xdd}        一个转义字符算一个字符长度

格式化字符
%d — 整形, %c — 字符型, %s — 字符串, %f — float类型, %lf — double类型, %zu sizeof()的返回值    %p — 地址

 

选择语句
if(){}         if(){}……else{}           if(){}……else if(){}…… else{}                switch(){case :}

循环语句
while(){}      for(){}          do{}……while()

编程语言中的3种基本结构:顺序结构、选择结构、循环结构

 

函数:就是将常用的功能代码封装在一起并起一个名字,想要使用功能时直接调用这个名字就行,冗余减少便于维护

数组:存放多个相同类型数据的容器;声明:int arr[长度];      声明并初始化:int arr[] = {1,2,3,4};   int arr[5] = {1,2,3,4};
数组在定义的时候必须指明长度,但是声明并初始化的过程中却并不做强制要求,因为会根据初始化的元素个数确定长度。
在使用数组元素也要清楚,想要使用数组中的元素需要通过下标,而数组中的下标则是从0开始计算的       

 

操作符
算数运算符:+、-、*、/、%          /有整数除法和浮点数除法两种,当左右两边有一个浮点数,则采用浮点数除法,两边都是整数采用整数除法
移位操作符:<<、>>
位操作符:&、|、^
赋值操作符:=、+=、-+、*=、/=、%=、&=、|=、^=、<<=、>>=
单目操作符:!、-、=、&、~、--、++、sizeof()、(数据类型)、⭐
关系操作符:>、<、>=、<=、==、!=
逻辑操作符:&&、||
条件操作符(三元运算符):exp1 ? exp2 : exp3;           如果exp1为真,就执行exp2并返回结果,如果exp1为假,就执行exp3并返回结果
逗号表达式:使用逗号隔开的一串表达式;逻辑规则:从左向右依次计算,最后一个表达式的值为整个表达式值
其他操作符:[]下标引用、    ()函数调用、      .   ->  结构成员

关键字:C语言已经定义好的特殊字段,有专属功能,不能当变量名使用
auto    break    case    char   const   continue    default    do    double     else    enum     extern    float    for    goto    if    int    long
register     return     short    signed     sizeof    static    struct    switch    typedef    union    unsigned     void     volatile     while
变量命名:包含字母数字下划线,但是不能以数字开头,建议采用驼峰命名法

typedef关键字:对数据类型重命名,    typedef   unsigned int    uint_32;        将unsigned int重命名为uint_32  方便调用
extern关键字:对其他文件中的全局变量使用,使其可以在本文件下可以使用
static关键字:可以修饰局部变量、全局变量、函数三种
  修饰局部变量:使局部变量在编译时被创建,且生命周期与工程生命周期一致;实际是将局部变量的存储位置更换了
  修饰全局变量:将全局变量保护起来,只允许在本文件中使用,不允许其他文件通过extern关键字或其他方式调用
  修饰函数:与修饰全局变量的作用类似,只允许函数在本文件中使用,其他文件不允许通过任何方式使用

 

指针
想要了解指针,首先要知道内存的一些知识
  内存:程序都是在内存中运行的,为了方便使用和管理内存,将内存分为了一个一个的小单元,每个小单元的存储大小是1字节且每个小单元都有唯一的一个地址;这样只需要访问地址就可以知道小单元中存储的内容是什么了
  例32位地址总线,可以有从0到2的32次方个唯一的地址序列,因为每个地址序列的存储大小是1字节,也就是说我们可以管理2的32次方个字节。    换算下来也就是4GB

例:int a = 10;就是想内存申请4个字节来存储10,那么内存就会分配4个小单元的地址来存放10
&取地址符号           &a;返回a的地址       既然有返回值,那么则需要一个类型来接收返回值, int*  p = &a;  数据类型*   指针变量名
int:表明a的类型,   *:说明是指针变量        p:指针变量名          &a:a的地址
*p:解引用操作符     通过p中存放的地址,找到p所指向的对象        *指针变量名
指针变量的大小:
根据编译器的位数,如果是32位编译器,则指针变量的大小是4字节,如果是64位编译器,则指针变量的大小是8字节;

 

结构体类型:struct stu = {char name[20]; int age; char sex[10]};
上述定义的是一个结构体类型,请注意是类型而不是变量类型不占用内存空间,而当声明了该类型的变量才会占用内存空间
如:struct stu s;      struct stu n = {"ni", 23, "man"};
如何使用结构体中的成员:s.name;   s.age;      通过.来使用成员
在指针变量的情况下又衍生出了另外一种访问成员的方法
  struct stu*   ps = &s;
  使用.      printf("%s %d", (*ps).name, (*ps).age);
  使用->    printf("%s %d", ps -> name, ps -> age);

两种方法的使用前提:“.”必须是结构体变量,结构体指针变量则可以“.”和“->”任意选择使用

posted on 2026-05-30 00:06  绝情世家  阅读(8)  评论(0)    收藏  举报