C语言第四课--------要我们一起快乐的学习吧

这篇具有很好参考价值的文章主要介绍了C语言第四课--------要我们一起快乐的学习吧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者前言

有兴趣的小可爱可以来参观我的giteehttps://gitee.com/qin-laoda

目录

关键字 typedef
关键字static
#define 定义常量和宏
指针
结构体
___________________________________________________________
紧接上一篇博客,在上一篇博客中我简单的解释了那些关键字的意思
下面我们插播一些小知识
插播一:
C语言第四课--------要我们一起快乐的学习吧

 内存的大概划分

插播二:

在VScode中 ,每个.c文件的运行都是单独的经过编译器处理的

关键字

auto   break   case   char   const   continue   default   do   double else   enum  
extern float   for   goto   if   int   long   register     return   short   signed              
sizeof   static struct   switch   typedef union   unsigned   void   volatile   while    

 

auto(使局部变量自动创建与自动销毁)

代码:
#include <stdio.h>
int main()
{
	auto int a = 0;
	int b = 0;
	return 0; 
}

其实在定义局部变量的时候我们只是省略了auto

关键字 typedef

代码:

#include <stdio.h>

typedef unsigned int uint;
typedef int INT;
int main()
{
	unsigned int a = 0;
	uint b = 2;
	INT c = 3;
	printf("a=%d b=%d c=%d", a, b, c);
	return 0;
}

结果:

C语言第四课--------要我们一起快乐的学习吧

可以看出typedef(类型重定义),太长的数据类型我们就需要简化 

uint   INT都是别名

关键字static(静态的)

有三种用法 修饰局部变量   修饰全局变量  修饰函数

下面我

来简单介绍

static 修饰局部变量

代码:

#include <stdio.h>
//没有static修饰
int Add_1()
{
	int i = 0;
	i += 2;
	return i;
}
//有static修饰
int Add_2()
{
	static int i = 0;
	i += 2;
	return i;
}
int main()
{
	int a = 0;
	int b = 0;
	while (a < 5)
	{
		int c = 0;
		c = Add_1();
		printf("c=%d\n", c);	
		a++;
	}
	while (b < 5)
	{
		int d = 0;
		d = Add_2();
		printf("d=%d\n", d);
		b++;
	}
	return 0;
}

结果:

C语言第四课--------要我们一起快乐的学习吧

 static int i = 0的创建是进入函数就创建好了,不是运行它才创建,往后再调用就会继续使用之前的i.不会创建新的i

我们可以查看反汇编C语言第四课--------要我们一起快乐的学习吧

 C语言第四课--------要我们一起快乐的学习吧

两者不同 

查看反汇编的方法

调试到如图中的为位置

C语言第四课--------要我们一起快乐的学习吧

 C语言第四课--------要我们一起快乐的学习吧

然后右击鼠标 

static修饰局部变量总结:

局部变量在没有static修饰会在出函数范围就自动销毁,有static修饰的局部变量,在第一次运行函数就创建了,出函数也不会销毁,就无需再次创建,可以理解为生命周期延长了,但是作用域不变

本质:在没有static修饰的局部变量就会存放在栈区,而被static修饰的局部变量就会存放在静态区,静态区的变量的生命周期和全局变量是一样的

static修饰全局变量

第一种

代码1:

#include <stdio.h>
int a = 12;
int g_val()
{
	printf("a_val():%d\n", a);
}
int main()
{
	printf("a=%d\n", a);
	g_val();
	return 0;
}

结果:

C语言第四课--------要我们一起快乐的学习吧

 第二种

C语言第四课--------要我们一起快乐的学习吧

 可以看出全局变量有外部链接属性,这种属性决定了全局变量可以在多个文件使用

extern 声明外部符 

当我们利用static修饰全局变量时

C语言第四课--------要我们一起快乐的学习吧

 原因是啥呢?

其实被static修饰的全局变量会把全局变量的外部链接属性变成内部链接属性(就是全局变量不能跨文件使用,只能在自己的.c文件使用),注意存储的地方还是静态区,加了static修饰的全局变量只是告诉编译器  "这个全局变量你只能在自己的,c文件使用,,不能乱跑"

可以理解为改变了作用域

static修饰函数

C语言第四课--------要我们一起快乐的学习吧

可以看出函数也是有外部链接属性,可以跨文件使用

当我们利用static修饰函数时

C语言第四课--------要我们一起快乐的学习吧

 可以看出其实被static修饰的函数会把函数的外部链接属性变成内部链接属性(就是全局变量不能跨文件使用,只能在自己的.c文件使用)

#define 定义常量和宏

我们前面回顾一下常量的定义

字面常量

#define定义常量

const修饰常变量

枚举常量(enum)

#include <stdio.h>
//定义标识符常量
#define M 100
#define CH 'g'
//
int main()
{
	printf("M=%d\n", M);
	printf("CH=%c\n", CH);


	return 0;
}

#define定义宏 

宏可以有参数也可以无参数,宏是替换的

C语言第四课--------要我们一起快乐的学习吧

 代码:

#include <stdio.h>
//宏
#define ADD(x, y) (x+y)
//函数
int Add(int x, int y)
{
	return x + y;
}
int main()
{
	int a = 12;
	int b = 13;
	int c = ADD(a, b);
	printf("c=%d", c);


	return 0;
}

结果

C语言第四课--------要我们一起快乐的学习吧

 指针

内存空间为了有效的进行管理:

1.把内存划分为一个个有效的内存单元(比如1个字节)

2.给每个内存单元编号==地址==指针

C语言第四课--------要我们一起快乐的学习吧

 地址怎么来呢

C语言第四课--------要我们一起快乐的学习吧

图中是32位机器,就有32根地址线,一根地址线产生1个bit位,共有2^32个地址,一个地址有32位bit

注意指针大小和内存单位大小是两个不同的概念,指针大小是指针大小,内存单位大小是内存单位大小

我们还可以参考内存

代码:

#include <stdio.h>
int main()
{
	int a = 10;



	return 0;
}

C语言第四课--------要我们一起快乐的学习吧

 C语言第四课--------要我们一起快乐的学习吧

 如果是多个内存储存一个变量,只会显示第一个内存的指针,因为我们可以通过运算算出其他指针

指针变量

代码:

#include <stdio.h>
int main()
{
	int a = 10;
	//指针变量
	int* p = &a;//0x007AFBA8---内存的编号==地址==指针
	//*说明p为指针变量  
	//int 是说明p指向的是int 类型的变量
    *p;//*解引用操作符 ,通过地址找到所指向的对象,即a   *pa==a
	printf("%d", *p);
	return 0;
}

*说明p为指针变量

int 是说明p指向的是int 类型的变量

C语言第四课--------要我们一起快乐的学习吧

 我们创建的指针变量是放入的是一个指针(内存的编号),不是内存

指针总结:

1.内存会划分以字节为单位的内存单元

2.每个内存单元都有编号,编号==指针==地址

3.c语言中创建的变量,是向内存申请一块空间,比如int a = 12,就是向内存申请一块4个字节的内存空间,这个空间有编号

4.这个地址要存储起来创建一个指针变量,如 int* p = &a

5.p存放的是a申请空间的编号,即指针,所以叫指针变量(用于存储编号的)

6. *p通过p存放的编号找到a

注意一下:

存入指针变量的任何东西都当作指针处理

指针变量的大小

代码:

#include <stdio.h>
int main()
{
	char* a;
	int* b;
	float* c;
	printf("%d\n", sizeof a);
	printf("%d\n", sizeof b);
	printf("%d\n", sizeof c);
	return 0;
}

结果:

C语言第四课--------要我们一起快乐的学习吧

 可以看出指针变量空间大小为4,

其实一个指针变量的空间大小是由地址线的条数决定的,一根地址线产生一个bit ,

结构体(复杂的对象)

比如 一个人:名字,身份证........

代码:

#include <stdio.h>
struct Stu
{
	char name[20];
	int age;
	int score;
};
int main()
{
	int num = 0;
	struct Stu name1 = { "张三", 18, 88};
	struct Stu name2 = { "张以", 15, 85};
	struct Stu name3 = { "张地方", 10, 86};
	struct Stu* ps = &name1;
	printf("%s %d %d\n", name1.name, name1.age, name1.score);
	printf("%s %d %d\n", name2.name, name2.age, name2.score);
	printf("%s %d %d\n", name3.name, name3.age, name3.score);
	printf("%s %d %d\n", ps->name, ps->age, ps->score);
	printf("%s %d %d\n", (*ps).name, (*ps).age, (*ps).score);
	return 0;
}

结果:

C语言第四课--------要我们一起快乐的学习吧

 结构体变量.结构体成员

结构体地址->结构体成员

(*结构体地址).结构体成员

总结

以上就是我所分享的内容,有不理解的小可爱可以来私聊我,这初识C语言就到此结束了,下面我会慢慢的一点点解释文章来源地址https://www.toymoban.com/news/detail-500899.html

到了这里,关于C语言第四课--------要我们一起快乐的学习吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 书生·浦语大模型实战营-第四课笔记

    期待已久的微调课 增量预训练和指令跟随是两种微调模式,即两种微调策略。   1)增量预训练 投喂新的领域知识即可,例如书籍、文章、代码 2)指令跟随 采用高质量对话和问答数据进行训练 两者是微调的方法,即算法。 xtuner是一种微调框架。

    2024年02月21日
    浏览(39)
  • MySQl数据库第四课-------------努力------努力------努力

     欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com ——————————————————————————————————          sudo          whoami          who                  exit                   reboot、shutdown            

    2024年02月13日
    浏览(36)
  • solidity进阶第四课——在合约中创建新合约

    在以太坊上,用户(外部用户)可以创建智能合约,智能合约同样也可以创建新的智能合约。去中心化交易所uniswap就是利用工厂合约(Factory)创建了无数个币对合约(Pair)。这一讲将讲如何在合约中创建合约。 create和create2 有两种方法可以在合约中创建合约,create和create

    2024年02月01日
    浏览(30)
  • Sentinel如何实现对分布式系统的高可用性和流量控制?我们通过源码一起学习

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel源码实现对分布式系统高可用性和流量控制,后续文章将详细介绍Sentinel的其他知识。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞

    2024年02月06日
    浏览(33)
  • Python---第四课--python基础之开发环境介绍(envn)

    说明—简单来说就是直接在终端中运行解释器,而不使用文件名的方式来执行文件。这种交互式的编程环境,我们可以称之为REPL,即读取(Read)输入的内容,执行(Eval)用户输入的指令,打印(Print)执行结果,然后进行循环(Loop),Python支持交互式编程。 特点:当你退出

    2023年04月19日
    浏览(27)
  • 从零实战SLAM-第四课(相机成像及常用视觉传感器)

      在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 ------------------------------------------------------------------------------------------------------------------------------- 相机的最基础模型就是针孔相机模型 针孔相机的

    2024年02月13日
    浏览(32)
  • rabbitmq第四课-RabbitMQ高可用集群架构详解以及生产环境最佳实践

    之前通过单机环境搭建起来的RabbitMQ服务有一个致命的问题,那就是服务不稳定的问题。如果只是单机RabbitMQ的服务崩溃了,那还好,大不了重启下服务就是了。 但是如果是服务器的磁盘出问题了,那问题就大了。因为消息都是存储在Queue里的,Queue坏了,意味着消息就丢失了

    2024年02月11日
    浏览(36)
  • 从0开始学C++ 第四课:常用C++编辑器和集成开发环境(IDE)的使用

    第四课:常用C++编辑器和集成开发环境(IDE)的使用 在这一课中,我们将了解一些流行的C++编辑器和集成开发环境(IDE),它们可以简化C++的编写、编译和调试过程。我们将介绍三种流行的IDE:Visual Studio Code、Eclipse和CLion,并指导如何设置一个简单的C++项目。 目标 了解不同

    2024年01月22日
    浏览(31)
  • 第七十一天学习记录:对陈正冲编著《C 语言深度解剖》中关于1、2、4,5章作者留下部分问题的学习

    问:有如下代码。 i 和 j 的值分别是什么,为什么? 答: 在这份代码中,变量 i 和 j 分别是函数 fun1 和 fun2 的静态局部变量。静态局部变量在函数内部声明,但在整个程序生命周期内都存在,且只初始化一次(第一次进入函数时初始化)。 在 main 函数中,fun1 和 fun2 分别被调

    2024年02月08日
    浏览(31)
  • 选购哪种护眼灯对眼睛好,让我们一起来看看吧

    在日常生活中,护眼灯已经是成为家庭流行使用的照明工具之一,护眼灯对视力是有一定帮助的,会摒弃摁掉一些日常灯具,对眼睛造成伤害的可能性,比如说蓝光,对人们的视力有不可逆的损伤,而护眼灯就过滤掉蓝光危害,还有频闪问题等等,护眼灯投射出来的光,会更

    2023年04月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包