练气六层 —— 重要知识点总结

目录

一.修炼必备

二.重要结论一

三.重要结论二

  !!!恭喜你,成功突破到练气六层!!!


一.修炼必备

  1.入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com)

  2.趁手武器:印象笔记/有道云笔记

  3.修炼秘籍:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

  4.雷劫必备:leetcode 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

  注:遇到瓶颈怎么办?百度百科_全球领先的中文百科全书 (baidu.com)

二.重要结论一

  1.#include <stdio.h>分析

#include <stdio.h>
#include "add.h"

1)stdio:标准输入输出(standard input output)
2).h:表示头文件,这些头文件放在程序的开头
3)stdio.h:表示输入输出的头文件[scanf/printf函数需要包含此头文件]
4)#include:告诉预处理器把头文件的内容插入到预处理器命令的相应位导入头文件的预编译指令
5)<>:表示系统自带的库-->当查找头文件时先从系统中查找
6)"":表示用户自定义的库-->当查找头文件时先查找用户定义的库,若找不到,再查找系统的库

  2.C语言中,分号是语句的结束符,每个语句必须是以分号结束的

#include <stdio.h>
int main()
{
	int a = 10;//以分号结尾
	double b = 20;//以分号结尾
	return 0;//以分号结尾
}

  3.一个程序可以有多个函数,但是有且只有一个主函数main()

//子函数1
void print()
{

}

//子函数2
void get()
{

}

int main()
{
	//两个子函数
	print();
	get();
	return 0;//因为返回了0这个值,需要使用int类型来进行接收返回的值
}

  4.1)C语言标识符大小写敏感,即严格区分大小写,一般变量名使用小写,常量名使用大写

     2)变量名且要有意义,“见名知意”

#include <stdio.h>
#define MAX 100 //常量名使用大写

int main()
{
	int num = 10;//变量名使用小写
	int min = 0;
	int max = 1000;
	return 0;
}

  5.char和unsigned char的比较

#include <stdio.h>

int main()
{
	//1)char的值范围是-128-127,unsigned char的值范围是0-255
	char a = -10;
	unsigned char b = -10;
	printf("%d %d\n", a, b);//-10 246
	//由此可知,unsigned char赋值负数后,值会重新变成正数

	//2)两者皆占用1个字节的空间大小
	printf("%d\n", sizeof(char));//1
	printf("%d\n", sizeof(unsigned char));//1
	return 0;
}

  6.两种类型的表达式

两种类型的表达式
1)左值:指向内存位置的表达式称为左值,左值可以出现在赋值号的左边或右边
2)右值:存储在内存中某些地址的数值,右值是不能对其进行赋值的表达式
3)右值可以出现在赋值号的右边,但不能出现在复制号的左边
4)当需要保存数据的时候,使用左值;需要读取数据的时候,使用右值

  7.全局变量、局部变量的内存分布

   1)全局变量存储在内存的静态区中,占用静态的存储单元

   2)局部变量存储在内存的栈区中,只有在所占函数被占用时才会被动态分配内存

                                        

   注:栈、堆、静态区详解

栈、堆、静态区详解
1)栈区:栈区的变量是编译器进行管理、自动分配和释放,
	   存放函数调用过程中的各种参数、局部变量、返回值以及函数返回地址
2)堆区:用于程序动态申请分配和释放空间,C语言中的malloc、realloc、free等均是在堆中进行的,
	    一般情况下,程序员申请的空间在使用结束后应该释放,若没有释放空间,则程序结束时系统自动回收
3)静态区:分为DATA段和BSS段。
DATA段(全局初始化区)释放存放初始化的全局变量和静态变量;
BSS段(全局未初始化区)存放未初始化的全局变量和静态变量,程序运行结束时自动释放
BBS段在程序执行之前会被系统自动清零,所以未初始化的全局变量和静态变量在程序执行之前已经为0。
#include <stdio.h>

//全局变量:在{}外定义的变量
int num = 0;//num是全局变量

//静态全局变量:在{}外使用static关键字修饰的变量
static int age = 18;

int main()
{
	//局部变量:在{}内定义的变量
	int date = 12;//date是局部变量

	//静态局部变量:在{}内使用static关键字修饰的变量
	static int data = 12;

	return 0;
}

  8.const和#define

   1)const:定义的变量不是常量,定义这个变量的值是不可修改的常变量,带有类型,在编译运行时会进行类型检查

   2)#define:定义的是不带类型的常数,只会进行简单字符替换,在预编译的时候起作用,不会进行类型检查

#include <stdio.h>

//2)#define:定义不带类型的常数,定义的常数在预编译阶段进行字符替换,不存在编译阶段的类型检查
#define MAX 1000

int main()
{
	//1)const:定义的是变量不是常量,定义的变量的值是不能改变,使用const修饰的变量称为常变量
	const int num = 10;
	//num = 20;//使用const修饰后的变量不可改变其值
	return 0;
}

  9.const和#define的区别

1.编译器处理方式不同
    1)#define是宏在预处理阶段展开
    2)const是在编译运行阶段进行使用
2.类型和安全检查不同
    1)#define是宏定义,没有任何类型,不做任何的类型检查,仅仅是展开宏定义
    2)const修饰的常变量有具体的类型,在编译阶段会进行类型检查
3.存储方式不同
    1)#define宏仅仅展开,有多少次宏就会展开多少次,不会占用内存
    2)const修饰的常变量会在分配内存
    3)(宏定义不分配内存,变量定义分配内存)
    4)宏替换只做替换,不做就算,不做表达式求解

三.重要结论二

  1.extern关键字的使用:全局变量的引用

  注:全局变量具有外部链接属性,任意c文件均可使用extern关键字进行引用

  2.%(取模运算符)

   1)取余运算符(%)只能用于整数,%的两边只能是整数,出现小数编译器会报错

   2)%左边是正数,余数也是正数;%左边是负数,余数也是负数

#include <stdio.h>

int main()
{
	//1)取余运算符(% )只能用于整数,% 的两边只能是整数,出现小数编译器会报错
	int a = 10;
	//double b = 3.0;
	int res = 0;
	//res = a % b;//报错,%只能使用在整数之间

	//% 左边是正数,余数也是正数
	res = -10 % 3;
	printf("%d\n", res);//-1
	res = -10 % -3;
	printf("%d\n", res);//-1

	//% 左边是负数,余数也是负数
	res = 10 % -3;
	printf("%d\n", res);//1
	res = 10 % 3;
	printf("%d\n", res);//1
	return 0;
}

  3.在任何要进行判断的表达式中,任何非零和非空的值为真,零和空为假

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 1;
	int* p = NULL;
	
	//p为null
	if (p)
	{
		printf("hehe\n");
	}

	//a为0
	if (a)
	{
		printf("haha\n");
	}

	//b为1:为真
	if (b)
	{
		printf("hihi\n");
	}
	return 0;
}

  4.全局变量、局部变量、静态局部变量、静态全局变量的区别

全局变量、局部变量、静态局部变量、静态全局变量的区别

1.全局变量
    ———— 在{}外部定义的变量,全局变量具有外部链接属性,在定义的全局变量中,任意一个源文件均可引用此全局变量

2.局部变量
    ———— 在{}内部定义的变量,局部变量只在函数执行期间存在,函数的调用结束后,局部变量所占的内存被收回

3.静态全局变量
    ———— 在{}外部使用static关键字修饰的变量,使用static修饰后,全局变量的外部链接属性变为内部链接属性,只能在本文件内可以访问

4.静态局部变量
    ———— 在{}内部使用static关键字修饰的变量,使用static修饰后,静态局部变量只会被初始化一次,它随着程序的结束而结束,局部变量的声明周期变长,静态局部变量只对定义自己的函数体始终可见

5.全局变量、静态全局变量、静态局部变量都在静态存储区中分配内存,局部变量在栈中分配内存空间
#include <stdio.h>

//全局变量:在{}外定义的变量,在静态区中分配内存空间
int data = 20;//全局变量

//静态全局变量:使全局变量的外部链接属性变成内部链接属性,使只能在本文件内使用
static int n = 40;//全局变量

int main()
{
    //局部变量:在{}内定义,栈中分配内存空间
    int num = 10;//num是局部变量

    //静态局部变量:只初始化一次,局部变量的生命周期变长,静态局部变量只对自己所在的{}可见
    static int age = 18;//静态局部变量
	return 0;
}

  !!!恭喜你,成功突破到练气六层!!!

猜你喜欢

转载自blog.csdn.net/qq_63200557/article/details/128492650
今日推荐