C语言里面那些你必须知道的常用关键字(详细讲解)

这篇具有很好参考价值的文章主要介绍了C语言里面那些你必须知道的常用关键字(详细讲解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  哈喽,各位铁汁们好啊!✨今天来给大家带来的是C语言中我们常用的关键字静态static的详细讲解和typedef#define定义常量和宏。
  既然是详解想必大家必定是想学一些平常学不到的东西吧!这里博主给大家详细讲解static修饰的变量在内存重视如何存储的,顺带给大家讲一下C/C++中的内存大致分为几个区域是如何存储的!废话不说了上干货

C语言里面那些你必须知道的常用关键字(详细讲解)

序言

1. C/C++中内存大致分的三个区域

  • 栈区(stack):由编译器自动分配释放。
        存放 :局部变量、形参、返回值。
  • 堆区 (heap): 由程序员分配内存和释放。
      调用函数 :malloc() free()等。
  • 静态区 :通常是用于那些在编译期间就能确定存储大小的变量的存储区,全局变量静态变量

C语言里面那些你必须知道的常用关键字(详细讲解)

2. 关键字static

在C语言中:

  • static是用来修饰变量和函数的

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

静态局部变量

示例:

大家来来看这段代码

C语言里面那些你必须知道的常用关键字(详细讲解)

  • 局部变量 a a a,在没有static修饰之前局部变量a是存放在栈区的。所以每次出局部范围就销毁(把空间还给操作系统)。然后,调用时重新创建初始化。
  • 那我们把局部变量a加上static关键字修饰成静态局部变量,会怎么样呢?
//static 修饰局部变量的时候
//本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了
//static 修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束
//但是作用域不变
void test()
{
	static int a = 5;//静态变量的
	a++;
	printf("%d ", a);
}

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

	return 0;
}

C语言里面那些你必须知道的常用关键字(详细讲解)

这里static关键字把变量a修饰成了静态变量,所以变量 a a a 本来是存放在栈区的,但是由于被修饰成静态变量所以被存放在静态区了。

  • 静态区变量的特点:

    • 创建好后,直到程序结束才销毁
      C语言里面那些你必须知道的常用关键字(详细讲解)

这里说明了:
静态变量a在程序编译的时候就自动创建好了。并且已经完成初始化了
而没有修饰呢:
C语言里面那些你必须知道的常用关键字(详细讲解)
没有修饰之前必须进入函数体中初始化语句才会完成初始化。

静态局部变量的作用域和生命周期

前面我们说了静态变量是创建完成后,直到程序结束才销毁。
所以

  • 静态变量的生命周期是整个工程。

而静态局部变量的作用域呢?

  • 虽然我们把变量a修饰成了静态局部变量
  • 但是他本质上还是个局部变量

所以他的作用域不变还是它所在的局部范围

静态全局变量

我们都这样全局变量的作用域是

  • 整个工程
    C语言里面那些你必须知道的常用关键字(详细讲解)
    可以看到只要在一个工程内,不同.c文件之间只要
    (声明)也可以调用。

  • 说明;

  • 全局变量具有外链接属性。

但是我们用static关键字修饰成静态全局变量看看

C语言里面那些你必须知道的常用关键字(详细讲解)
说明
static 修饰全局变量

  • 改变了这个全局变量的链接属性,由外边链接属性变成了内部链接属性
  • 就是这个静态变量只能在自己所在的源文件内部使用,不能在其他源文件内部使用了
  • 感觉像是作用域变小了

静态函数

static修饰函数和修饰全局变量是一样
C语言里面那些你必须知道的常用关键字(详细讲解)

用static修饰函数了之后

C语言里面那些你必须知道的常用关键字(详细讲解)
说明:
用static修饰函数

  • static 修饰函数和static修饰全局变量是一样的
  • 函数是具有外部链接属性的,但是被static修饰,就变成了内部链接属性
  • 使得这个函数只能在自己所在的源文件内部使用,不能在其他文件内部使用的

#define 定义常量和宏

#define 定义常量

#define M 100

int main()
{
	int arr[M] = {0};//100*4 = 400
	int m = M;
	printf("%d\n", sizeof(arr));//400
	printf("%d\n", M);
	printf("%d\n", m);
	return 0;
}

这里#define 定义的是M这个标识符常量

  • 以后我们在碰到M的时候编译器在编译期间,就会自动替换为常量100
  • 通常在定义数组时使用或者重复值时。

#define 定义宏

我们来看一下宏是怎么定义的:
C语言里面那些你必须知道的常用关键字(详细讲解)
和定义函数非常相识
C语言里面那些你必须知道的常用关键字(详细讲解)
但是宏没有函数的返回类型参数类型
还是很不一样的,宏的实现体一般都是表达式

那么宏是怎么调用的呢?和函数有什么区别嘞?
//宏
#define ADD(x, y) ((x)+(y))

//函数
int Add(int x, int y)
{
	return x + y;
}

int main()
{
	int a = 10;
	int b = 20;
	int c = ADD(a, b);
	//int c = (a)+(b);
	printf("%d\n", c);

	int d = Add(a, b);
	printf("%d\n", d);
	return 0;
}

我们可以看到宏的调用也和函数产不多
但是

  • int c = ADD(a, b);这段代码调用宏的本质是替换

  • int c = (a)+(b);在编译的时候就把ADD这个宏替换成这样

    而函数调用是

  • 把实参传到函数形参里面进行计算,然后在返回值

关键字 typedef

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

//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
    //观察num1和num2,这两个变量的类型是一样的
    unsigned int num1 = 0;
    uint_32 num2 = 0;
    return 0;
}

总结

好了今天主要是带大家认识关键字 static#define typedef
总结一下今天学了:
  关键字static
  关键字static修饰变量的作用域变化
  #define定义的宏和常量
  关键字typedef

不知道大家掌握了没有,希望对各位铁汁有用呢!
看到这里了还不给博主扣个点赞收藏
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!
有问题可以评论或者私信呢秒回哦。
C语言里面那些你必须知道的常用关键字(详细讲解)文章来源地址https://www.toymoban.com/news/detail-506534.html

到了这里,关于C语言里面那些你必须知道的常用关键字(详细讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【C++那些事儿】深入理解C++类与对象:从概念到实践(下)| 再谈构造函数(初始化列表)| explicit关键字 | static成员 | 友元

    📷 江池俊:个人主页 🔥 个人专栏:✅C++那些事儿 ✅Linux技术宝典 🌅 此去关山万里,定不负云起之望 1.1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是

    2024年03月21日
    浏览(52)
  • C语言-外部关键字extern

    extern  extern 用在全局变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。  什么是定义,什么是声明?       什么是定义:所谓的定义就是为这个变量分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名。但注意,这个名

    2024年02月07日
    浏览(46)
  • 【C语言】static关键字详解

    目录 1.static是什么? 2.static修饰的对象是? 3.static修饰后改变了什么? 4.static修饰操作演示 (1) 局部变量 如果加了static修饰局部变量i会怎么样? 全局区(静态区) (2) 全局变量 如果给全局变量加上了static修饰呢? 二者区别?  这样用有什么用? (3) 函数 5.总结

    2024年02月10日
    浏览(45)
  • C语言之static关键字详解

     前言: 一、几个概念 1.变量 2.局部变量和全局变量 3.变量的作用域 4.变量的生命周期 二、static的作用 三、static修饰局部变量 四、static修饰全局变量  五、static修饰函数  写在最后:            static,英文意思静态的,作为C语言常用中一

    2024年02月03日
    浏览(43)
  • 前端学习C语言 - 函数和关键字

    本篇主要介绍: 自定义函数 、 宏函数 、 字符串处理函数 和 。 基本用法 实现一个 add() 函数。请看示例: 其中a, b 叫 形参 ,num1, num2 叫 实参 。 Tip :形参和实参的个数不同,笔者编译器报错如下(一个说给函数的参数少,一个说给函数的参数多了): 函数调用过

    2024年02月09日
    浏览(56)
  • C语言操作符和关键字

    C语言中,0表示假,非0表示真 sizeof ++ (类型)强制类型转换 d的结果就是: static修饰局部变量 static修饰全局变量 static修饰函数

    2024年04月28日
    浏览(44)
  • C语言标准定义的32个关键字

    欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。 专栏:《精通C语言》 C语言中的数据类型主要有下面

    2024年02月13日
    浏览(52)
  • XML Map 端口进阶篇——常用关键字和格式化器详解

    XML Map 端口是用于在不同XML之间建立关系映射的工具,允许通过拖拽操作实现源XML和目标 XML之间的数据字段映射,除此之外,XML Map 端口还提供了其它丰富多彩的功能,使用户能够更加灵活和高效的处理XML 数据映射任务,让我们一同深入探索这些功能吧。 以生成850订单为例:

    2024年02月21日
    浏览(42)
  • [开发语言][c++]:Static关键字和全局变量

    写在前面: 如果您只是想回顾或了解一下static和全局变量的异同点,那么下面的总结将满足您的需求。 如果您是一位初学者或对二者的使用模棱两可,建议您读完该篇文章,相信这一篇将解答完您对于static以及全局变量的所有疑惑。 如有问题或建议欢迎评论 or 私信

    2024年01月20日
    浏览(58)
  • 【C语言】静态关键字static的用法(详解)

     🎈个人主页:库库的里昂  🎐CSDN新晋作者  🎉欢迎 👍点赞✍评论⭐收藏  ✨收录专栏:C语言初阶  ✨其他专栏:代码小游戏  🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 【前言】 不同于其他,他们都有多种用

    2024年02月14日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包