首页 > 其他分享 >嵌入式初学-C语言-十八

嵌入式初学-C语言-十八

时间:2024-08-08 22:25:58浏览次数:10  
标签:存储 全局变量 函数 局部变量 嵌入式 传递 初学 C语言 变量

#接嵌入式初学-C语言-十七#

变量的生命周期

1. 概念:变量在程序运行中存在的时间

2. 根据变量存在的时间不同,变量可分为静态存储和动态存储

 3. 变量的存储类型

变量的完整定义格式:[存储类型] 数据类型 变量列表; 

 

4. 存储类型

auto:存储类型只能修饰局部变量,被修饰的局部变量,是存储在动态存储区的,auto也是局部变量默认的存储类型

static:修饰局部变量,局部变量就会从动态存储区到静态存储区。局部变量的生命周期被延长,但是作用域不发生改变;修改全局变量,全局变量声明周期不变,但作用域被衰减,一般限制全局变量,只能在本文件内

extern:外部存储类型,只能修饰全局变量,此全局变量可以被其他文件访问,相当于扩展了全局变量的作用域;extern修饰外部变量,往往是外部变量进行声明,声明该变量是在外部文件中定义的,不是变量定义

register:寄存器存储类型,只能修饰局部变量,用register修饰的局部变量会直接存储到cpu的寄存器中,往往将循环变量设置位寄存器存储类型

值传递与引用传递

值传递:发生在整型、浮点型、字符型,数据传递,传递的是数值,也就是内存空间只能被当前变 量独享。

引用传递:发生在数组、指针、结构体..,数据传递,传递的是地址值,也就是内存空间可以被多 个变量共享。

 

 

// 值传递(整型、浮点型、字符型..)
fun(int x)
{
    printf("%d\n",x); // x = 10
    x = 20; // x = 20
}

main()
{
    int a = 10; // a = 10
    fun(a);

    printf("%d\n",a);// a = 10
}
-------------------------------------------------------------------------------------
// 引用传递(数组、指针、结构体..)
fun(int x[10])
{
    printf("%d\n",x[9]);// x[9] = 0
    x[9] = 20; // x[9] = 20
}

main()
{
    int a[10] = {1,2,3};
    fun(a);

    printf("%d\n",a[9]);// a[9] = 20
}

内部函数和外部函数

内部函数

       使用static修饰的函数,只能在当前文件中调用

外部函数

       使用extern修饰的函数,extern是默认的可以不写,本质上我们写的函数都是外部函数,建议在被其他文件调用的时候,在其他文件声明的时候加上extern

小结

1. C语言中函数是用来完成一定功能的;

2. C语言中有两种函数:库函数和用户自定义函数;

3. 函数的定义和声明含义是不同;

4. 函数处于调用它的函数之后时,要进行原型声明。函数原型声明有两种形式;

5. 调用函数是要注意:实参与形参个数应相同、类型应一致(或兼容);数据传递是从实参到形参的单向值传递;

6. 函数可以嵌套调用,也可以递归调用;

7. 数组元素作实参其用法与普通变量相同,传递的是元素的值。而数组名作实参,向形参传递的是数组的首地址,而不是全部元素的值;

8.变量的作用域时值变量有效的范围。根据定义变量的位置不同,分为局部变量和全局变量;

9. 变量的存储类别共有4个:auto、static、register、extern 前3个用于局部变量,可改变变量的生存期。 extern只能用于全局变量,可改变变量的作用域;

10. 函数有内部和外部之分。本质上是外部的,但在其它文件调用时,要用extern对其声明。若不想让调用,应在定义时加上static,将其屏蔽起来;

11.变量的生存期是指变量存在的时间。全局变量的生存期是程序运行的整个期间,局部变量则不同。Static类为程序运行的整个期间, auto和register则与所在函数调用的时间段相同,函数调用结束就不存在了;

标签:存储,全局变量,函数,局部变量,嵌入式,传递,初学,C语言,变量
From: https://blog.csdn.net/MaBaB/article/details/141037627

相关文章

  • 新手的第一个c语言小程序
    作为一个C语言的新手,我深知要想精通这门语言,就必须通过不断的练习来积累经验。因此,我决定从解决高中数学问题入手,编写我的第一个C语言小程序。显然,高中的许多数学问题复杂难解,对于我这个初学者来说,理解答案本身就已经是一项挑战,更不用说用程序来求解了。所以,我选择了数列求和这一......
  • C语言学习
    学习内容一维数组,二维数组创建,初始化,数组名代码笔记#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>//一维数组//数组的创建//数组:相同元素类型的集合//数组的创建方式//typt_t  arr_name [const_n];//元素类型       常量表达式,用来指......
  • C语言--函数
    函数的概述:函数:实现一定功能的,独立的代码模块。函数一定是先定义,后使用使用函数的优势:·我们可以通过函数提供功能给别人使用,也可以使用别人提供的函数,减少代码量               ·借助函数可以减少重复的代码               ·实现结构化(......
  • C语言数组练习
    数组作业一维数组练习题题目1键盘录入一组数列,利用冒泡排序将数据由大到小排序#include<stdio.h>intmain(){ intt[100],num,tmp; printf("请输入数字个数:"); scanf("%d",&num); printf("请输入%d个数字:\n",num); for(inti=0;i<num;i++){ sc......
  • 鹏哥C语言自定义笔记重点
    1.浮点数在内存中不能精确保存。2.sizeof这个操作符计算返回的结果是size_t类型的,是无符号整数型的,当遇见负数会被认为是非常大的数。3.strcpy在拷贝字符串时,会把源字符串中的\0也拷贝过去。assert是断言,可以防止NULL,需要头文件#include<assert.h>。const修饰指针变量放在*......
  • C语言入门零基础:5、进制数和进制转换
    前提:printf语句和scanf语句是源自与stdio.h这个头文件中的函数,它们的作用分别是输出和输入。应用:    printf("helloworld\n");  //用于输出(打印)hellowolrd这个语句。    inta;    scanf("%d",&a);   //用于向a空间输入一个整形数据......
  • c语言中输出字符指针相关问题
    原文链接:https://blog.csdn.net/littesss/article/details/71037908c语言中输出字符指针相关问题一、例如定义一个char*p="hello";的字符指针。首先搞清楚在c语言中没有字符串的类型,所以对字符串操作,有两种形式:可以用字符指针(为什么不叫字符串指针,我个人觉得,字符指针针对......
  • C语言实现猜数字小游戏
    前言与概述本文章讲述如何通过C语言开发一款猜数字的小游戏,开发这款小游戏会让你在学习编程道路上获得更多成就感和快乐。程序功能①:文字从两端向中间汇聚的欢迎界面②:输入密码登录游戏③:简约美观的游戏主界面④:深挖猜数字游戏背后运行逻辑⑤:丰富多样的程序功能⑥:无限......
  • 字符旋转的结果(c语言)
    1.字符旋转的结果//写一个函数,判断一个字符是否为另一个字符串旋转之后的字符串//是返回1,不是返回02.方法一:我们可以使用字符旋转,进行一一比较。如果相等是返回1,如果不是返回0,将第一位存储起来,其他位先前相加,然后将第一位放在最后一位,进行比较,如果没有相等,那在++进行比较.......
  • 【C语言】一篇文章搞定C语言最难指针
    目录一、内存和地址(1)什么是内存的地址(2)如何寻找指定的内存地址(3)CPU和内存传递数据的方式二、指针变量和地址(1)取地址操作符(2)指针变量(3)解引用操作符(4)指针变量的大小(5)指针变量的类型的意义 ①指针的解引用②指针+/-整数③void*指针三、const修饰指针(1)cons......