当前位置:网站首页>【C语言从初阶到进阶】第二篇 初始C语言(二)

【C语言从初阶到进阶】第二篇 初始C语言(二)

2022-08-11 05:16:00 小吕编程之路

在这里插入图片描述

前言

这里接着上一解初始C语言讲,前提还是对C语言有一个大概的了解,形成一个框架。

<

一.常见的关键字

在这里插入图片描述
注意:这里关键字都是语言本身设定好的,自己不能创建。

下面我们简单来接一些关键字的用法

1.关键字typedef

typedef 顾名思义是类型定义,这里应该理解为类型重命名。

下面我们用一段代码来解释上面这句话的意思。

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
#include<stdio.h>
typedef unsigned int uint_32;
int main()
{
    
	
	unsigned int num1 = 10;
	uint_32 num2 = 10;
	printf("%d %d", num1, num2);
	return 0;
}

输出结果为 10 10

2.关键字static

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

  1. 修饰局部变量-称为静态局部变量
  2. 修饰全局变量-称为静态全局变量
  3. 修饰函数-称为静态函数

下面我们先来了解内存的分布

在这里插入图片描述

2.1修饰局部变量

代码演示:

在这里插入图片描述

两个代码不同之处就是static,那么输出结果会有什么差异呢?
左边输出:2 2 2 2 2 2 2 2 2 2
右边输出:2 3 4 5 6 7 8 9 10 11

总结

为什么缺少一个static会出现这样的结果呢?下面我会大家总结一下,static 修饰局部变量的时候,改变了变量的存储类型,普通的局部变量是存储在栈区,而被static修饰的变量改变了存储类型,变成了静态区的变量,出来作用域不会被销毁,上面左边那个代码,a被赋值为1,后置++为2,a出了作用域就就被销毁了,重新在调用test函数时,a又被重新赋值为2,直到循环结束。而static修饰的变量,出来作用域不会被销毁,依然存在。

所以静态变量的生命周期就是程序的生命周期,程序结束的时候,静态变量才回收空间。

2.2修饰全局变量

代码演示

在这里插入图片描述
在这里插入图片描述

输出:报错

总结

全局变量是具有外部链接属性
static修饰全局变量的时候
这个全局变量的外部链接属性就变成了内部链接属性
这个全局变量只能在自己所在的.c文件中看到,其他源文件看不到了
不能在其他源文件中使用。

2.3修饰函数

代码演示

在这里插入图片描述
输出:还是报错

总结

函数本身是具有外部链接属性
如果static修饰函数,函数的外部链接属性就变成
了内部链接属性
这个函数只能在自己所在的源文件内部使用,其他
源文件不发使用该函数

二.️#define定义常量和宏

代码演示

在这里插入图片描述
宏的本质是将x和y的值替换成a和b,而函数是将a和b传给x和y,再将最后值返回输出,他是有一个过程,大家可以将这个代码敲一下,感受一下。

这里的#define定义常量在这里就不讲了,我在初始C语言(一)讲到过
大家可以去看看这个
初始C语言(一)

三.指针

1.内存

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

代码演示

在这里插入图片描述
在这里插入图片描述

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

2.指针的使用

代码演示:

在这里插入图片描述

以整形指针举例,可以推广到其他类型,如:

#include <stdio.h>
int main()
{
    
   char ch = 'w';
   char* pc = &ch;
   *pc = 'q';
   printf("%c\n", ch);
   return 0;
 }

3.指针变量的大小

代码演示:

x86(32位机器)的环境下输出4,x64(64位机器)的环境下输出8
在这里插入图片描述

总结

32位机器 - 一个地址是32个二进制位,存储需要32个bit位的空间,所32位机器上,指针变量的大小是4个字节
//64位机器 - 一个地址是64个二进制位,存储需要64个bit位的空间,所64位机器上,指针变量的大小是8个字节

四.结构体

结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义,在c语言中也是比较重要的。

比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。

代码演示:

代码一

#include<stdio.h>
//创建一个结构体
struct Stu
{
    
	char name[20];//姓名
	int age;//年龄
	char sex[5];//性别
	char id[12];//学号
};
int main()
{
    
	struct Stu s = {
    "liming", 20, "nv", "2022010578"};//初始化
	printf("%s %d %s %s\n", s.name, s.age, s.sex, s.id);//打印
	//结构体变量.结构体成员
	return 0;
}

代码二

#include<stdio.h>
struct Stu
{
    
	char name[20];
	int age;
	char sex[5];
	char id[12];
};

void print(struct Stu* ps)
{
    
	printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).id);
	printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->id);
	//结构体指针->结构体成员
}
int main()
{
    

	struct Stu s = {
     "zhangsan", 20, "nan", "2022010578" };
	print(&s);//函数调用,取出s的地址。
	return 0;
}

上面我们讲到三种结构体的打印。

总结

今天,初始C语言就完了,下期预告【C语言从初阶到进阶】第三篇,C语言分支循环详解。
感谢各位观看,码文不易,三连击走起来🥰。

原网站

版权声明
本文为[小吕编程之路]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_71659028/article/details/126218813