【C语言学习】基础知识

1.变量

1.1 变量命名规则

  • 只能由字母(包括大写和小写)数字下划线(_)组成;
  • 不能以数字开头;
  • 长度不能超过63个字符;
  • 变量名中区分大小写;
  • 变量名不能使用关键字。

1.2 变量分类

  • 局部变量
  • 全局变量
c 复制代码
#include<stdio.h>

int global = 2019;//全局变量
int main()
{
    int local = 2018;//局部变量
    int global = 2022;//局部变量和全局变量同名定义没有问题
    printf("global = %d\n",global);
    return 0;
}

当局部变量和全局变量同名的时候,局部变量优先使用;

1.3 变量的作用域和生命周期

1.3.1 作用域

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

  1. 局部变量的作用域是变量所在的局部范围;
  2. 全局变量的作用域是整个工程。

1.3.2 生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束;
  2. 全局变量的生命周期是:整个程序的生命周期。

2.常量

常量分为以下几种:

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量
c 复制代码
#include<stdio.h>
//枚举
enum Sex
{
    MALE,
    FEMALE,
    SECRET
};//枚举常量的默认是从0开始,依次向下递增1的

int mian()
{
    3.14;//字面常量
    //const 修饰的常变量
    const float pai = 3.14f;//这里pai是const修饰的常变量,pai值是不能直接修改的
    
    //#define的标识符常量
    #define MAX 100;
    printf("max = %d\n",MAX);
    
    return 0;
}

3.字符串+转义字符+注释

3.1 字符串

c 复制代码
"hello openCV.\n"

这种由双引号引起来的一串字符称为字符串字面值,或简称字符串。

注意:字符串的结束标识是一个\0的转义字符。在计算字符串长度的时候\0是结束标识,不算作字符串内容。

c 复制代码
#include<stdio.h>
int main()
{
    char arr1[] = "hello";
    char arr2[] = {'h','e','l','l','0'};
    char arr3[] = {'h','e','l','l','0','\0'};
    printf("%s\n",arr1);
    printf("%s\n",arr2);//没有结束标识符,会出现乱码。
    printf("%s\n",arr3);
    
    return 0;
}

3.2 转义字符

转义字符 释义
? 在书写连续多个问号时使用,防止被解析成三个字母词
' 反斜杠+',表示字符常量'
" 反斜杠+",表示一个字符串内部的双引号
\ 双反斜杠,用于表示一个反斜杠,防止他被解释成为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字;如:\130 X
\xdd dd表示2个十六进制数字;如:\x30 0

在屏幕上打印一个目录:c:\code\test.c

c 复制代码
#include<stdio.h>

int main()
{
    printf("c:\\code\\test.c\n");
    return 0;
}

3.3 注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉;
  2. 代码中有些代码比较难懂,可以加一下注释文字。

注释有两种风格:

  • C语言风格的注释 /*xxxxxxxx*/

    缺陷:不能嵌套注释

  • C++风格的注释//xxxxxxxx

    可以注释一行也可以注释多行

4.常见关键字

c++ 复制代码
auto break case char continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef 

上述关键字是C语言提供的预设的,程序员可以直接使用。

4.1关键字typedef

typedef 顾名思义是类型定义,这里可以理解为类型重命名

c 复制代码
typedef unsigned int uint_32;
//将unsigned int 重命名为uint_32,因而uint_32也是一个类型整数
int main()
{
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    
    return 0;
}

4.2关键字static

在C语言中:static是用来修饰变量和函数的

  • 修饰局部变量,称为静态局部变量;
  • 修饰全局变量,称为静态全局变量;
  • 修饰函数,称为静态函数。

4.2.1修饰局部变量

c 复制代码
//代码1
#include<stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ",i);
}

int main()
{
    int i = 0;
    for(i = 0; i < 10; i++)
    {
        test();
    }
    
    return 0;
}

//代码2
#include<stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ",i);
}

int main()
{
    int i = 0;
    for(i = 0; i < 10; i++)
    {
        test();
    }
    
    return 0;
}

通过对比代码1和代码2的运行效果,可以得到下列结论。

结论:

static修饰局部变量改变了变量的生命周期;

让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。

4.2.2 修饰全局变量

c 复制代码
//代码1
//add.c
int g_val = 2020;
//test.c
int main()
{
    printf("%d\n",g_val);
    return 0;
}

//代码2
//add.c
static int g_val = 2020;
//test.c
int main()
{
    printf("%d\n",g_val);
    return 0;
}

代码1运行时正常,代码2运行时出Bug。

结论:

一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

4.2.3修饰函数

c 复制代码
//代码1
//add.c
int Add(int x,int y)
{
    return x + y;
}
//test.c
int main()
{
    printf("%d\n",Add(2,3));
    return 0;
}

//代码2
//add.c
static int Add(int x,int y)
{
    return x + y;
}
//test.c
int main()
{
    printf("%d\n",Add(2,3));
    return 0;
}

代码1运行正常,代码2在编译的时候出现链接错误。

结论:

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

5.#define定义常量和宏

c 复制代码
//define定义标识符常量
#define MAX 1000

//define定义宏
#define Add(x,y) ((x)+(y))

#include<stdio.h>
int main()
{
    int sum = Add(2,3);
    printf("sum = %d\n",sum);
    
    sum = 10 * Add(2,3);
    printf("sum = %d\n",sum);
    
    return 0;
}

6.指针

6.1内存

内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。所以为了有效地使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节 。为了能有效地访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

6.2指针变量的大小

指针变量的大小取决于地址的大小;

32位平台下地址是32个bit位(即4个字节);

64位平台下地址是64个bit位(即8个字节)。

指针大小在32位平台是4个字节,64位平台是8字节。

7.结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。例如描述学生,学生包含:名字+年龄+性别+学号这几项信息。

c 复制代码
struct Stu
{
    char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[15];//学号
};

结构体的初始化:

c 复制代码
//打印结构体信息
struct Stu s = {"张三",20,"男","1930301"};
//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n",s.name,s.age,s.sex,s.id);
//->操作符
struct Stu* ps = &s;
printf("name = %s age = %d sex = %s id = %s\n",ps->name,ps->age,ps->sex,ps->id);

本文主要是对C语言相关知识的一个简介,后续会对难点进行详细说明。

相关推荐
屁股割了还要学1 小时前
【C语言进阶】题目练习(3)
c语言·开发语言·c++·学习·算法·青少年编程
学不动CV了3 小时前
基于按键开源MultiButton框架深入理解代码框架(三)(指针的深入理解与应用)
c语言·arm开发·stm32·单片机·算法·51单片机
躲着人群3 小时前
马拉车(Manacher)算法
c语言·数据结构·c++·算法
basketball6163 小时前
Linux C 信号操作
linux·c语言·开发语言
网易独家音乐人Mike Zhou5 小时前
【Linux应用】在PC的Linux环境下通过chroot运行ARM虚拟机镜像img文件(需要依赖qemu-aarch64、不需要重新安装iso)
linux·c语言·stm32·mcu·物联网·嵌入式·iot
草莓熊Lotso6 小时前
【数据结构初阶】--双向链表(二)
c语言·数据结构·经验分享·链表·刷题
遇见尚硅谷9 小时前
C语言:20250719笔记
c语言·开发语言·数据结构·c++·算法
erdongchen9 小时前
分支和循环语句 (2/ 2)
c语言
秋说9 小时前
【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历
c语言·数据结构·算法