嵌入式学习day11(函数)

1、多维数组传参:可以用多维数组名作为函数的实参和形参。

可以写成 void print(int a[3][4],int rows)或void print(int a[][4],int rows)第一维行可以省略,第二位列不能省略。

2、二维字符传参 :void printstring(char s[][100],int rows) 也是第一维可以省略,第二维不能。

3、标识符的作用域和可见性:可以分为局部作用域和全局作用域

(1)局部作用域:任意一对花括号里的内容,只在定义它的代码块内有效,它存储在栈中。程序执行离开这个代码块后,这些局部变量就会被销毁。函数的形参属于局部作用域。


    
   if (true) 
   {
        int y = 20;  // 局部变量y,只在if块内有效
        printf("%d", x); 
   }


形参也是局部作用域:

 void foo(int x)
 {  // x是形参,作用域开始
    printf("%d", x);  // ✅ 可以访问x
  }                   // x的作用域结束

 int main() 
{
    foo(5);
    printf("%d", x);  // ❌ 错误!x在这里未定义
    return 0;
}

全局作用域:花括号外的内容,其作用范围从定义点开始,直到整个程序结束。全局变量在整个程序运行期间都是可访问的。

局部变量:局部变量是在函数内部内部定义的变量,数据在栈上。

全局变量:全局变量是在所有函数外部定义的变量,其作用域从定义点开始到文件结束,可以被该文件中的所有函数访问。存储在静态区,不进行初始化时,程序会自动将其清零。

(2)可见性:标识符必须先定义再使用

                        没有包含关系的两个不同作用域中定义的同名标识符,互相不影响。

                         同一作用域中,不能定义同名标识符

                        在两个或多个具有包含关系的作用域中定义的同名标识符,外层标识符在内层不可见。

4、变量的生存周期 :(1)静态生存期:与整个程序运行周期相同(全局变量)

                                    (2)动态生存期:静态局部变量。

5、Auto: (Auto 局部变量)开辟和销毁空间程序自动完成。

auto x = 5;       
auto y = 3.14;     
auto z = "hello";  

6、register 寄存器:register int k;表示变量开到寄存器里,运算快,此时k不能取地址(CPU里没地址),编译会报错。

7、extern 声明外部变量,当被条函数在主调函数下方时,就需要声明

// utils.h
extern void helperFunc();  // 明确表示外部链接

// main.c
#include "utils.h"
helperFunc();  // 调用

8、static :(1)全局变量前加static int c;代表此时跟静态生存期无关,只代表只能在本 .c文件中使用。(2)局部变量加后变为静态生存期


(1)

// file1.c
static int hiddenVar = 42; // 仅本文件可见

static void utility() {    // 仅本文件可调用
    // ...
}



(2)
void counter() 
{
    static int count = 0; // 只初始化一次
    count++;
    printf("%d", count);
}
// 多次调用counter(): 1, 2, 3...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值