鹏哥C语言学习笔记分享【数据类型、变量、变量的作用域和生命周期、常量分类】(Markdown笔记)

14 阅读10分钟

鹏哥C语言笔记,2026.4.30

一、printf函数,主函数main

1. 输出为danhuang

首先写头文件

#include <stdio.h>

  • C语言中代码一定要有main函数,C语言规定main函数是程序的入口,必须有,但有且只有一个。
  • 主函数
  • 标准主函数写法如下
int main()
{
    printf("danhuang\n");

    return 0;
}
  • 返回0(return 0)意味着返回整数,然而int为整型类型,所以达到前后呼应
  • \n 代表打印后换行
  • 双引号为字符,printf为库函数,专门用来打印数据
  • ==使用库函数要打招呼,打招呼的方式为#include包含,包含一下<stdio.h>这个头文件,之后才可以正式使用printf这个库文件==
  • std-standard标准的意思,i输入,o输出
  • 如何运行代码:ctrl+F5
  • Ctrl+F5运行,输出如下图 peoH1S0.png

2. 把上面写的一段编成注释

选上这几行代码,点击上面栏中的注释选中行,取消就点隔壁那个有箭头的取消注释选中行。

3. 数据类型

  • 代码
#include<studio.h>
int main()
{
    printf("%d\n", 100);
    printf("%d\n", sizeof(char));
    printf("%d\n", sizeof(short));
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(long));
    printf("%d\n", sizeof(long long));
    printf("%d\n", sizeof(float));
    printf("%d\n", sizeof(double));
 

 return 0;
}

==这里面把%d换成%zu其实更准确==

  • 输出图片

peoHNTJ.png

  • 数据类型介绍 ==chart---字符数据类型; short---短整型; int---整形; long---长整型; long long---更长的整形; float---单精度浮点数; double---双精度浮点数(精度高一点用double)==

4. 数据类型的作用

类型是用来创建变量的,创建变量的本质是【向内存申请空间】。

通过类型,给个名字(例如age),就可以创建一个变量,这样申请出了空间,就可以往该空间存放一定的数据,例如20(age=20)。

  1. 代码如下
#include<studio.h>

int main()
{
    int age = 20;
    double price = 66.6;

    return 0;
}

2. 其他介绍

  • %d代表按照整形的形式打印;sizeof代表尺寸,就是占几个字节
  • 计算机中单位bit--比特位,byte--字节,kb--一千个字节,mb,gb,tb,pb;八个比特位为一个字节;kb为1024个字节;mb为1024个kb......

鹏哥C语言笔记,2026.5.1

一、变量和常量

常量,即不变的量,例如圆周率,性别,身份证号码,血型等等。 变量,即可以变化的量,例如年龄、体重、薪资。

1. 定义变量(创建变量)的方法

  • ==类型是用来创建变量的,即写变量前要先写上类型。==

例如,我们要定义变量age为20,可以看到20是一个整数。符合整数的变量有:short短整型;int整形;long长整型。在这里20可以为short或int,所以用这两个变量哪一个都可以使用。

  • ==具体代码如下==
#include <stdio.h>

int main()
{
    short age = 20;
    int high = 180;
    float weight = 88.5;

    return 0;
}

2. 变量的分类

  • ==变量分为【局部变量】和【全局变量】==
  • 什么是局部变量?是大括号里面的变量。
  • 什么是全局变量?是大括号外面的变量。
  • ==如下图代码,b为全局变量,a为局部变量。==
#include <stdio.h>

int b = 20;//全局变量b

int main()
{
    int a = 10;//局部变量a

    return 0;
}
  • ==下图代码是否正确?==
#include <stdio.h>

int main()
{
    int a = 10;//局部变量a
    int a = 100;

    return 0;
}

错误,错因为重复定义。在同一个范围内,代码只能定义一次。

  • ==下图代码是否正确,输出什么?==
#include <stdio.h>
int a = 100;

int main()
{
    int a = 10;
    printf("a=%d\n", a);

    return 0;
}

正确,且输出为10,括号里所定义的值。全局变量和局部变量名字相同时,输出局部优先。(但其实最好不要写成一样的) peTBkdg.png

3. 变量的使用

==题目一:写一个代码,计算任意两个整数之和==

  1. 先设置两个变量,并将它们初始化为零。
  2. scanf为输入函数,%d %d 表示输入两个整数,中间要空格。
  3. 两个整数一个放到num1中,一个放到num2中。
  4. 但是不能只写num1 ,num2。scanf需要地址,在变量前加上&表示取地址,如&num1。取地址后两个变量中间用逗号隔开。
  5. 两个变量要求和,令这个和为sum。然而sum这个变量还没有创建,写个int sum,创建完成。
  6. 输出sum。
  • ==具体代码如下== #include <stdio.h>

    int main()
    {
        int num1 = 0;
        int num2 = 0;
        scanf("%d %d", &num1, num2);
        int sum = num1 + num2;
        printf("%d\n", sum);
        return 0;
    
    }
    
  • 输出发生了错误,需要阅读一下提示文字,如下图所示 peTBbpn.png

1. 图中说"scanf不安全,建议替换为scanf_s替代。如果不想用scanf_s来描述(以为scanf_s非标准C语言函数,其他编译器不认识),请使用_CRT_SECURE_NO_WARNINGS"

2. 如何使用?只需要把“_CRT_SECURE_NO_WARNINGS”复制下来,粘贴到所有代码的最前面,也就是整个文件的第一行。所以最终第一行为#define+空格+复制的这一串。

  • ==修改后代码如下==
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num1 = 0;
    int num2 = 0;
    scanf("%d %d", &num1, &num2);
    int sum = num1 + num2;
    printf("%d\n", sum);
    return 0;

}

运行该代码,会跳出一空白框.空白是因为需要我们向里面输入求和的两个值。输入100 200(100空格200),回车键。

  • ==输出如下图== peTDd9s.png

peTDTHO.png

鹏哥C语言笔记,2026.5.2

一、变量的作用域

变量在哪里能起到作用,哪里就是它的作用域。

1. 局部变量的作用域

==一般为定义处的临近两个括号之间==

  • ==代码示例一(在作用域内代码可运行)==
#include <stdio.h>

int main()
{
    {                        //作用域始
        int a = 10;
        printf("a=%d\n", a);
    }                        //作用域终

    return 0;
}
  • 示例一输出为 pe7kGEd.png

  • ==代码示例二(在作用域外代码运行错误)==

#include <stdio.h>

int main()
{
    {                        
        int a = 10;         //作用域始
        printf("a=%d\n", a);//变量作用域内
    }                       //作用域终         
    printf("a=%d\n", a);    //变量作用域外

    return 0;
}
  • 示例二输出为 pe7k4rF.png 错误,如上图,错因是未定义标识符。也就是说在作用域外,变量相当于未定义。
  • ==代码示例三==
#include <stdio.h>

int main()
{                    //作用域始
    int a = 10;
    {                        
        printf("a=%d\n", a);
    }                       
    printf("a=%d\n", a);
    return 0;
}                    //作用域终
  • 示例三输出为 pe7ASVH.png

因此,结合上面三个实例,不难看出,局部变量的作用域是有限的。 找到定义变量处,邻近的一对括号之间的范围就是该局部变量的作用域。

2.全局变量的作用域

==全局变量的作用域是整个工程。(全局变量哪里都能用,在整个工程里都可以用。)==

什么叫整个工程? 就是整个项目,该项目里面的多个文件之间可以同时用同一个全局变量。(只不过此时要加【extern int a;】声明)

  • ==代码示例一==
#include <stdio.h>

int a = 10;         //全局变量定义处

void test()
{
	printf("test-->%d\n", a);
}
int main()
{                    
	test();
	{                        
		printf("a=%d\n", a);
	}                       
	printf("a=%d\n", a);

	return 0;
}                   
  • 示例一输出 pe7AOFs.png

二、变量的生命周期

1. 局部变量的生命周期

==作用域始→作用域终。== ==(进入作用域,生命周期开始;出作用域,生命周期结束。)==

2.全局变量的生命周期

==整个程序的生命周期==

鹏哥C语言笔记,2026.5.3

一、常量

1. 字面变量

整型常量,浮点数常量,字符常量,字符串常量......

  • ==代码示例如下==
#include <stdio.h>

int main()
{
    30;       //**整型**常量
    3.14;     //**浮点数**常量
    'W';      //单引号括起来的是**字符**常量
    "abc";    //双引号括起来的是**字符串**常量

	return 0;

}

2.const修饰的常变量

  1. 可被修改的变量
  • ==示例代码如下==
#include <stdio.h>

int main()
{
    int a = 10;
    a = 20;
    printf("%d\n", a);

    return 0;

}
  • ==示例代码输出如下== pe7gFMj.png

1.如上可以发现,a是一个变量,原来定义的a=10可以被改变,改变后输出为20。 2.那如何使该变量不被改变呢?---使用const将变量变为常变量。

  1. 不可被修改的变量

只需要在“int a=10;”前面加const

  • ==示例代码如下==
#include <stdio.h>

int main()
{
    const int a = 10;
    a = 20;
    printf("%d\n", a);

    return 0;

}
  • ==示例代码输出如下== pe7gDOA.png

1.发现输出错误,错误原因如图,意思就是const指定的变量不可以被修改,此时就实现了变量不能被修改。也叫做常变量。 2.常变量到底是常量or变量?---本质还是变量,但是不能被修改,而“不能被修改”是一种常量的属性。

  1. 证明const修饰的常变量是变量

【1】利用数组 arr来证明。

【2】arr[ 10 ]------数组是一个连续的空间,10代表空间里面可以存放十个整型。

  • ==示例一代码如下==
#include <stdio.h>

int main()
{
    int arr[10] = { 0 };

    return 0;

}

以上代码为正确代码。

【3】arr[ ]括号中只可以放常量,放变量就会报错

  • ==示例二代码如下==
#include <stdio.h>

int main()
{
    int n = 10;
    int arr[n] = { 0 };

    return 0;

}
  • ==示例二报错如下== pe72z8S.png 报错原因如图,原因为数组里应该输入常量表达式,而n为变量。

【4】证明常变量是变量,即为证明const 修饰的常变量放到数组中会报错

  • ==示例三代码如下==
#include <stdio.h>

int main()
{
    const int n = 10;
    int arr[n] = { 0 };

    return 0;

}
  • ==示例三报错如下==

pe7RrIP.png 报错原因如图,原因与【3】中一样。 可以明确的说明const修饰的常变量并不是常量。

3. define定义的标识常量

  • ==示例一代码如下==
#include <stdio.h>

#define MAX 100

int main()
{
    printf("%d\n", MAX);
    int a = MAX;
    printf("%d\n", a);
    return 0;
}
  • ==代码输出如下==

pe7WVeA.png

以上说明,MAX就是一个定义的标识常量。 标识常量(MAX)不仅可以被打印,还可以把它的值用来使用(a=MAX)。

  • ==示例二代码如下==
#include <stdio.h>

#define MAX 100
#define STR "abcdef"           //define一个字符串

int main()
{
    printf("%d\n", MAX);
    int a = MAX;
    printf("%d\n", a);
    printf("%s\n", STR);        //%s是代表字符串

    return 0;
}
  • ==示例二输出如下==

pe7WDOJ.png

以上说明,表示常量还可以是字符串,不一定非是整数。

  • ==示例三代码如下==
#include <stdio.h>

#define MAX 100
#define STR "abcdef"

int main()
{
    printf("%d\n", MAX);
    int a = MAX;
    printf("%d\n", a);
    printf("%s\n", STR);
    MAX = 200//在这里改一下MAX值

    return 0;
}
  • ==示例三输出报错==

pe7Womd.png

报错的原因为:该标识常量不能被改变。

4. 枚举常量

1. 枚举的关键字 enum

1.enum可以定义一个枚举类型。例如 enum Color,为枚举类型。 2.Color可能的取值为 RED,BLUE,GREEN,这三个颜色就是枚举常量。 3.类型是用来创建变量的,写了类型,我们还有创建一个变量c。 4.可以给c赋值,这个赋的值需要是枚举常量中的一个,例如c = RED 。

  • ==示例代码如下==
#include <stdio.h>

enum Color      //枚举类型
{
    RED,        //这三个就是枚举常量
    GREEN,
    BLUE
};

int main()
{
    enum Color c = RED;     //用类型创建一变量c,并赋值(类型给变量创建空间)

    return 0;
}

pe7fMA1.png