万字小长文 初识C语言 C语言基础知识点总结 建议直接收藏 期末复习的法宝

大家好啊,我是即将秃头的菜鸟,大家叫我菜鸟就好,本文主要是梳理一下C语言的基础知识点,没有什么特别深的知识点,都是基础。

目录

什么是C语言?

初始C语言

数据类型   

变量的分类

变量的作用域和生命周期

  1.作用域

   2.生命周期

变量的使用

常量

        1. 字面常量

        2.const修饰的常变量

            3.#define定义的标识符常量

          4.枚举常量

字符串

转义字符

选择语句

循环语句

函数

数组

操作符

算术操作符 

移位操作符   

位操作符 

赋值操作符 

单目操作符    

关系操作符

逻辑操作符

条件操作符(三目操作符)

逗号表达式

下标引用、函数调用和结构成员

常见关键字

关键字register

关键字typedef

关键字static

#define定义常量和宏

指针

    内存

​指针变量的大小

结构体

结构体的初始化:


什么是C语言?

 C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易
的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的
C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制
定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉
字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

初始C语言

写C语言代码,首先要写出主函数
int - 整型
printf 是一个C语言提供的库函数
专门用来按照某种指定的格式来打印的
库函数的使用,得包含对应的头文件
std     i       o
标准 输入 输出 头文件
主函数是程序的入口
在一个工程中,主函数有且仅有一个

数据类型   

那么为什么出现了这么多的类型呢?
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。

变量的分类

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。

不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。

  1.局部变量                 2.全局变量
在局部变量和全局变量名字冲突时,局部优先。什么意思呢,请看图片:

变量的作用域和生命周期

  1.作用域

    作用域(scope)是程序设计的概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的。而限定这个名字的可用性的代码范围就是这个名字的作用域。                
  一个代码哪里可以使用,哪里就是它的作用域

   2.生命周期

    变量的生命周期是变量的创建到销毁之间的一个时间段
        1.局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。
        2.全局变量的生命周期:整个程序的生命周期。

变量的使用

常量

    C语言中的常量分为一下几种:
        字面常量
        const修饰的常变量
        #define定义的标识符常量
        枚举常量

        1. 字面常量

            20;
            3.14;
            'a';//字符常量
            "abcdef";//字符串常量
            int a = 10;
            char ch = 'w';

        2.const修饰的常变量

              const 是一个C语言的关键字
             const 常属性的意思
             const int num = 10;
             printf("%d\n", num);
             num = 20;//修改 - error
             printf("%d\n", num);
             //数组
             int arr[10] = { 0 };
             const int n = 10;
             //这里的n本质是一个变量,所以不能使用在数组定义时,指定大小
             //所以叫n是常变量
             //int arr[n] = { 0 };

            3.#define定义的标识符常量

             #define定义表示符
             #define name stuff
             //这里的name那么在代码中就可以完全代替后面的stuff

          4.枚举常量

                枚举--一一列举
              

字符串

        字符串就是一串字符,用“”括起来的一串字符。
           注意:字符串结束位置隐藏了“\0”的字符,“\0”为字符串结束标志,不算字符串内容。

转义字符

            \\    用于表示一个反斜杠,防止它被解释为一个转义序列符
            \a   警告字符,蜂鸣
            \“  用于表示一个字符串内部的双引号
            \’  用于表示字符常量‘
            \b   退格符
            \f    进纸符
            \n   换行
            \r    回车
            \t    水平制表符
            \v   垂直制表符
            \ddd   ddd表示1-3个八进制的数字  如:\130x
            \xdd   dd表示2个十六进制数字  如:  \x30 0

选择语句

#include <stdio.h>
int main()
 {   
     int coding = 0;   
     printf("你会去敲代码吗?(选择1 or 0):>");  
     scanf("%d", &coding);    
     if(coding == 1)  
     {
        prinf("坚持,你会有好offer\n");
     }  
     else
    { 
       printf("放弃,回家卖红薯\n");
    }   
    return 0;
}

循环语句

    C语言中如何实现循环呢? 
        while语句
        for语句
        do ... while语句
    
//while 循环例子
#include <stdio.h>
int main()
{
    int line = 0;
    while(line <= 30000)
    {
        line++;
        printf("我要努力学习,多敲代码\n");
    }
    if(line > 30000)
        printf("拿到一个好offer\n");
return 0;
}

函数

#include <stdio.h>
int main()
{    
    int num1 = 0;
    int num2 = 0; 
    int sum = 0; 
    printf("输入两个操作数:>"); 
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
 }
 //上述代码,写成函数如下:
#include  <stdio.h>
int Add (int x, int y) 
{   
    int z = x+y;   return z;
}
int main()
{    
    int num1 = 0;
    int num2 = 0
    int sum = 0; 
    printf("输入两个操作数:>"); 
    scanf("%d %d", &num1, &num2);  
    sum = Add(num1, num2); 
    printf("sum = %d\n", sum);  
    return 0; 
}
函数的特点就是简化代码,代码复用



数组

Ex:要存储1-10的数字,怎么存储?
C语言中给了数组的定义:一组形同类型元素的集合
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问。
int arr[10] = {0};
//如果数组10个元素,下标的范围是0-9
数组的使用
#include <stdio.h>
int main() 
{
    int i = 0; 
    int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 
    for(i=0; i<10; i++) 
        {       
            printf("%d ", arr[i]); 
        }
    printf("\n");   
    return 0;
}

操作符

算术操作符 

  +  -  *  /  %

移位操作符   

<<    >>     注意:移位操作符移的是二进制位

位操作符 

  & 按位与       

  |   按位或

  ^   按位异或

赋值操作符 

就不细说了,相信大家能看懂

  =      +=      -=      /=      &=      ^=      |=      >>=     <<=

单目操作符    

    !    逻辑反操作
    -      负值
    +      正值 
            int a = -10;
            int b = +a;
            printf("%d\n", b);
    &       取地址
    sizeof    操作数的类型长度(以字节为单位)
            int a = 10;
            printf("%d\n", sizeof(a));//单位是字节
            printf("%d\n", sizeof(int));
    ~        对一个数的二进制取反
    --       前置、后置--
    ++     前置、后置++  
            int a = 10;
            int b = a + 1;
             int b = ++a;// 前置++,先++,后使用 //a = a+1; b=a;
             int b = a++;// 后置++,先使用,后++ //int b = a;a=a+1;
            int b = --a;//a=a-1;b=a;
            int b = a--;//b=a;a=a-1
    
      *        间接访问操作符(解引用操作符)
(类型)     强制类型转换

关系操作符

    >   大于
    <   小于
    <=  小于等于
    >=  大于等于
   !=   不等于
    ==   等于

逻辑操作符

    &&    逻辑与
     | |       逻辑或

条件操作符(三目操作符)

    exp1?exp2:exp3
    exp1成立,exp2计算,整个结构是exp2的结果
    exp1不成立,exp3计算,整个结构是exp3的结果

逗号表达式

    int a=1,b=2,c=3;
    int d=(b=a+1,c=b-1,a=c+1);         从左向右算,结果是最后表达式的
                    3        2         3 

下标引用、函数调用和结构成员

[ ]    ()    .       -> 

常见关键字

关键字register

int main()
{
    int num = 10;//4个字节
    register int num2 = 20;//建议将20放在寄存器中
    return 0;
}

关键字typedef

    typedef是类型定义,也可理解为类型重命名
    

关键字static

    在c语言中:static是用来修饰变量和函数的
  • 修饰局部变量-称为静态局部变量
  • 修饰全局变量-称为静态全局变量
  • 修饰函数-称为静态函数
    static修饰局部变量    
        
   
造成这种局面的原因就是static修饰局部变量改变了局部变量的生命周期(本质上来说是改变了变量的存储类型)
static修饰局部变量的时候,局部变量就变成了静态的局部变量出了局部的范围,不会销毁,下一次进入函数依然存在其实是因为: static修饰的局部变量是存储在静态区的。static修饰局部变量时实际改变的是变量的存储位置,本来局部变量是放在栈区的,被static修饰后放在了静态区。从而导致,出了作用域依然存在,生命周期并没有结束。
static修饰全局变量
    全局变量本身作用域是整个工程,生命周期也是整个程序的生命周期。static修饰全局变量是使这个全局变量只   能在自己所在的那个源文件使用,其他源文件不能使用。
    而全局变量能被其他源文件使用,是其具有外部链接属性,被static修饰后,变成了内部链接属性
    栈区(stack)--由编译器自动分配释放,存放函数的参数值,局部变量的值登。其操作方式类似于数据结构中的栈
    堆区(heap)--一般由程序员分配释放,若程序员不释放,程序结束时卡尼由OS回收。注意它与数据结构中的堆是两回事。
    全局区(静态区)(static)--全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
static修饰函数
    使函数只能在源文件内部使用,本质上也是static改变了连接属性,不过是将外部连接属性改成内部链接属性
  

#define定义常量和宏

指针

    内存

       内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地址
    变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。 取出变量地址如下:
#include <stdio.h>
int main()
{
    int num = 10;
    &num;//取出num的地址    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址                                                                                                                                                 (较小的地址)
    printf("%p\n", &num);//打印地址,%p是以地址的形式打印
    return 0;
}
    那地址如何存储,需要定义指针变量。
    
    int num = 10;
    int *p;//p为一个整形指针变量
    p = &num;
    指针的使用实例:
    #include <stdio.h>
    int main() 
    { 
        int num = 10; 
        int *p = &num; 
        *p = 20;
        return 0; 
    }
    以整形指针为例,推广到其他类型:
     #include <stdio.h>
     int main() 
    { 
        char ch = 'w'; 
        char* pc = &ch; 
        *pc = 'q'; 
        printf("%c\n", ch);    
        return 0;
     }

​指针变量的大小

结构体

结构体是C语言中特别重要的知识点,结构体使得C语言由能力描述复杂类型。
比如描述学生,学生包括:名字、年龄、性别、学号等信息。
就只能用结构体来描述了

结构体的初始化:

猜你喜欢

转载自blog.csdn.net/qq_52592775/article/details/122145557