练气五层 —— 初识C语言基本结构二

目录

一.修炼必备

二.关键字

三.#define定义常量和宏(初识)

四.指针(初识)

五.结构体(初识)

六.总结

         !!!恭喜你,成功突破至练气五层!!!


一.修炼必备

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

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

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

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

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

二.关键字

  1.关键字使用规则

auto 自动变量,局部变量
break 跳出switch分支和循环的关键字
continue 结束当前循环,执行下一次循环
do 与while联合使用:do while();
while while循环
for for循环
switch 多分支,与case、default搭配使用
case switch中的匹配语句
default case匹配失败的,则由default执行
char 字符型数据类型
short、int、long、long long 短整型、整型、长整型、长长整型
float、double 单精度浮点数、双精度浮点数
const 把变量变成常变量,常变量的值不能改变
if 条件语句
if - else 单分支条件语句
if - else if - else if …… else 多分支条件语句
enum 枚举类型
extern 引用外部全局变量
goto 无条件跳转语句
register 寄存器
return 函数中返回值
signed 有符号的,一般与数据类型搭配
unsigned 无符号的,一般与数据类型搭配
sizeof 得到对象或类型的存储字节大小
static 静态的,一般与数据类型搭配
struct 结构体
typedef 类型重定义
union 联合体(共用体)
void 用于函数无返回值,或形参列表无参数
volatile 防止编译器对代码进行优化 

  2.typedef关键字

    —— 对数据类型进行重定义(重命名)

#include <stdio.h>

typedef unsigned int unit; //把无符号整型重命名为unit
int main()
{
	unit a = 10;
	printf("%u\n", a);//%u是打印无符号整型
	return 0;
}

1125df75d8e741cf824cea7d0c70ee7e.png

  3.static关键字

    i.static修饰局部变量:静态局部变量

     —— 静态局部变量只被初始化一次,static改变了局部变量的生命周期,从一开始的该局部变量出了所在的{}后消失,但被static修饰后,该局部变量直到程序结束前都是一直存在的(在静态区),且静态局部变量只对定义自己的函数体始终可见(也就是说,只在自己的{}内有用)

#include <stdio.h>

void test(int i)
{
	static int j = 10;//静态局部变量,只会初始化一次,随着程序结束而结束
	j++;
	printf("i = %d j = %d\n", i, j);
}

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

d15c0d169ef642d8bfcdfbb84fb35710.png

    ii.static修饰全局变量:静态全局变量

     —— 全局变量具有外部链接属性,其他文件的全局变量,我们可以使用extern关键字来引用;static修饰全局变量后,该全局变量就不具有了外部链接属性(该全局变量只能在本文件内访问)

#include <stdio.h>


extern int sum;//引用外部全局变量:因为全局变量具有外部链接属性
int main()
{
	printf("%d\n", sum);
	return 0;
}



add.c

int sum = 100;

4068c3feeba8447d80b621a37614f452.png

#include <stdio.h>

extern int sum;//因为sum的外部链接属性不存在了,所以无法引用这个变量
int main()
{
	printf("%d\n", sum);//找不到sum变量
	return 0;
}



add.c

//使全局变量的外部链接属性不存在,只能在本文件使用,不能被外部文件使用
static int sum = 100;

d1dbed4c1a6048f4b69422fa71ab1cd0.png

    iii.static修饰函数:静态函数

     —— static修饰函数和修饰全局变量一样,使函数的外部链接属性不存在,只能在本文件内使用

108287f39f3d42e09267eb95d752d28e.png

三.#define定义常量和宏(初识)

  1.#define定义常量

#include <stdio.h>

#define MAX 100
int main()
{
	printf("%d\n", MAX);//100
	return 0;
}

  2.#define定义宏(后面详解)

#include <stdio.h>

//#define定义宏
#define sum(a,b) ((a)+(b))

int main()
{
	printf("%d\n", sum(10, 20)); //30
	return 0;
}

  注:以“#”开头的均为预处理命令,“define”为宏定义命令;在宏定义时,我们尽量给要进行的操作加上括号

  question:#define定义宏和函数有什么区别?(后面解答)

四.指针(初识)

  1.内存

    i.内存是电脑上重要的存储器,计算机中程序的运行都是在内存中进行的

    ii.内存被划分为一个个小的内存单元,每个内存单元的大小是1字节

    iii.变量是在内存中分配空间的,每个内存单元都有地址,即变量也是有地址的

                                               3249edbe2a904243a99041b7124c462a.png

#include <stdio.h>

int main()
{
	int a = 10;//向内存申请4个字节的空间储存10
	return 0;
}

  2.地址是如何产生的?

   —— 32/64位机器上,32根/64根地址线(电线),电线是有通电的两种状态:高电位和低电位,转化为数字信号就是1/0,32/64个1/0组成的数字既是地址

  3.取出变量的地址(&)

#include <stdio.h>

//使用&符号取出变量的地址
int main()
{
	int num = 0;
	scanf("%d", &num);//输入函数,&是取num变量的地址,输入的数放在num的地址中
	&num;//取出num的地址
	//使用%p打印地址信息
	printf("%p\n", &num);//006FF9E0:地址随机产生,每次产生的地址不同
	return 0;
}

  4.如何储存地址?

   —— 定义指针变量进行存储

   指针变量:用指针储存一个变量的地址信息

    i.指针的形式:

char*
int*
long*
float*
double*
…………

    ii.指针变量的使用 

#include <stdio.h>

int main()
{
	int a = 10;
	int* pa = &a;//&a取出了a的地址,使用pa进行储存a的地址,pa即为指针变量
    char* c = 'a';
    char* pc = &c;
	return 0;
}

  5.指针变量的大小

    i.32位机器上,指针变量的大小为4个字节

    ii.64位机器上,指针变量的大小位8个字节

#include <stdio.h>
int main()
{
	//sizeof求数据类型或对象的字节大小
	printf("char* =%d\n", sizeof(char*));
	printf("short* =%d\n", sizeof(short*));
	printf("int* =%d\n", sizeof(int*));
	printf("long* =%d\n", sizeof(long*));
	printf("long long* =%d\n", sizeof(long long*));
	printf("float* =%d\n", sizeof(float*));
	printf("double* =%d\n", sizeof(double*));
	return 0;
}

   32位机器下指针变量大小

bd642895df134a709aa27a19b4cec20a.png

  64位机器下指针变量大小 

c08a62f6575040da856cbb8ec86be787.png

五.结构体(初识)

  1.什么是结构体?

   —— C语言中想要描述某一事物更加的细致,不可能单单靠几个数据类型就能解决,我们需要使用复杂类型才能把某一事物描述的更加细致,而结构体有能力做到这个

  2.认识结构体(struct)

#include <stdio.h>

//描述学生的结构体
struct student
{
	char name[12];//姓名
	char sex;//性别
	int age;//年龄
};

int main()
{
	return 0;
}

  3.初始化结构体

#include <stdio.h>

struct student
{
	char name[12];
	char sex[2];
	int age;
};

int main()
{
	struct student stu = { "小明",'男',18 };//声明结构体变量stu并初始化结构体变量
	return 0;
}

  4.访问结构体成员信息

    i.使用.去访问结构体成员的信息

#include <stdio.h>

struct student
{
	char name[12];
	char sex[3];
	int age;
};

int main()
{
	struct student stu = { "小明","男",18};//声明结构体变量并初始化结构体变量
	//打印结构体变量的信息:使用.去访问结构体的成员信息
	printf("name = %s sex = %s age = %d\n", stu.name, stu.sex, stu.age);
	return 0;
}

    ii.使用(*xx).xx或->去访问结构体指针的成员信息

#include <stdio.h>

struct student
{
	char name[12];
	char sex[3];
	int age;
};

int main()
{
	struct student stu = { "小明","男",18 };//声明结构体变量并初始化结构体变量
	struct student* p = &stu;//指针p储存了stu的地址
	//使用(*xx).xx或->去访问结构体指针的成员信息
	printf("%s %s %d\n", (*p).name, (*p).sex, (*p).age);
	printf("%s %s %d\n", p->name, p->sex, p->age);
	return 0;
}

03da9df65ad74047b26d3831ab5d2f26.png

六.总结

  1.常用关键字

  2.typedef关键字的作用

  3.static关键字

    1)修饰局部变量 

    2)修饰全局变量

    3)修饰函数

  4.#define的作用

    1)定义常量 

    2)宏定义

  5.指针:

    1)内存的解释 

    2)每个单元内存的大小 

    3)地址的产生

    4)指针的形式 

    5)指针变量的使用 

    6)指针变量的大小

  6.结构体

    1)为什么需要复杂结构类型?

    2)结构体的样式

    3)结构体的初始化

    4)结构体的成员访问

  !!!恭喜你,成功突破至练气五层!!!

猜你喜欢

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