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

本文详细介绍了C语言的基础知识,包括关键字的使用规则,如auto、break、continue等,以及typedef和static的多重作用。深入讲解了#define定义常量和宏的基本概念。此外,还探讨了指针的内存原理、地址产生、指针变量的大小以及如何通过指针访问结构体成员。最后,简述了结构体的概念、初始化和成员访问方法。这是一份适合初学者的C语言入门教程。
摘要由CSDN通过智能技术生成

目录

一.修炼必备

二.关键字

三.#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();
whilewhile循环
forfor循环
switch多分支,与case、default搭配使用
caseswitch中的匹配语句
defaultcase匹配失败的,则由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)结构体的成员访问

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

  • 31
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值