当前位置:网站首页>[C language from elementary to advanced] Part 2 Initial C language (2)

[C language from elementary to advanced] Part 2 Initial C language (2)

2022-08-11 05:45:00 Xiaolu's road to programming

在这里插入图片描述

前言

Here follows the previous solution to the initialC语言讲,The premise is still correctC语言有一个大概的了解,形成一个框架.

<

一.常见的关键字

在这里插入图片描述
注意:The keywords here are all set by the language itself,自己不能创建.

Below we briefly pick up the usage of some keywords

1.关键字typedef

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

Below we use a piece of code to explain the meaning of the above sentence.

//将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. 修饰函数-称为静态函数

Let's first understand the distribution of memory

在这里插入图片描述

2.1修饰局部变量

代码演示:

在这里插入图片描述

The difference between the two codes is thatstatic,So what will be the difference in the output?
左边输出:2 2 2 2 2 2 2 2 2 2
右边输出:2 3 4 5 6 7 8 9 10 11

总结

Why is one missingstaticThis result will appear?Below I will summarize for you,static 修饰局部变量的时候,改变了变量的存储类型,Ordinary local variables are stored in the stack area,而被staticThe decorated variable changes the storage type,Become a variable in the static area,The out scope will not be destroyed,The code on the left above,a被赋值为1,后置++为2,aIt is destroyed when it goes out of scope,Calling againtest函数时,ais reassigned to 2,直到循环结束.而static修饰的变量,The out scope will not be destroyed,依然存在.

So the life cycle of static variables is the life cycle of the program,程序结束的时候,静态变量才回收空间.

2.2修饰全局变量

代码演示

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

输出:报错

总结

全局变量是具有外部链接属性
static修饰全局变量的时候
这个全局变量的外部链接属性就变成Internal link properties
这个全局变量只能在自己所在的.c文件中看到,No other source files can be seen
不能在其他源文件中使用.

2.3修饰函数

代码演示

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

总结

The function itself has an external linkage property
如果static修饰函数,The external linkage property of the function becomes
Internal link properties
这个函数只能在自己所在的源文件内部使用,其他
Source files do not use this function

二.️#define定义常量和宏

代码演示

在这里插入图片描述
The essence of the macro is tox和y的值替换成a和b,And the function is willa和b传给x和y,Then return the last value to the output,He has a process,You can type this code,感受一下.

这里的#defineDefining constants will not be discussed here,I am startingC语言(一)讲到过
大家可以去看看这个
初始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位机器)output in the environment4,x64(64位机器)output in the environment8
在这里插入图片描述

总结

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

四.结构体

结构体是由一批数据组合而成的结构型数据.组成结构型数据的每个数据称为结构型数据的“成员” ,其描述了一块内存区间的大小及解释意义,在cLanguage is also more important.

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

代码演示:

代码一

#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;
}

Above we talked about the printing of three structures.

总结

今天,初始CLanguage is over,下期预告【CLanguages ​​from Beginner to Advanced】第三篇,CDetailed explanation of language branch loops.
感谢各位观看,码文不易,Three hits to go🥰.

原网站

版权声明
本文为[Xiaolu's road to programming]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/223/202208110512530733.html