嵌入式学习day12

一.二维数组作为函数参数

void printArray2D(int a[][4],int rows)    //  用函数调用实现二维数组打印

{

        int cols = sizeof(a[0]) / sizeof(a[0][0]);

        int i,j;

        for(i = 0;i < rows;++i)

        {

                for(j = 0;j < cols;++j)

                {

                        printf("%d",a[i][j]);

                }

        }

}

int main(void)

{

        int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

        int rows = sizeof(a) / sizeof(a[0]);

        printArray2D(a,rows);

}

 ps:1.没声明时,被调函数需要写在主调函数之前。

      2.因为二维数组传参,传的是地址值,因此,被调函数无法知道实参的实际大小,所以还需传入被调函数的大小,a的大小为3,表示有3个一维数组。

      3.在定义函数时,传入二维数组作为实参的每个一维数组元素定义个数,应与形参表示数字相同。

        如上面个实参为 a[3][4],形参为a[][4]。

注:二维字符型数组传参与二维整型数组传参类似。

二.标识符的作用域与可见性

作用域分为 局部作用域 和 全局作用域。

局部作用域通常指花括号里。

int g_i;   //全局变量  通常存在内存的全局区,从定义开始,到本文件结束,才会回收空间

int main(void)

{

        int i = 0;   //局部变量   通常存在内存的栈区

        int j = 0;   //局部变量   通常存在内存的栈区

        

        return 0;

}

ps: 全局变量不赋值,默认为0。而局部变量不赋值,则是个随机数。

标识符的可见性

1.标识符必须先定义再使用。

2.在同一作用域中不得定义同名标识符,即使是 int i,和double i。

3.在没有包含关系的不同作用域中定义的同名标识符互不影响。

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

int i = 15;

int main(void)

{

        int i = 10;

        {

                int i = 100;

                printf("%d\n",i);//打印值为100

        }

        printf("%d\n",i);//打印值为10

        return 0;

}

ps: 遵循就近原则

三.变量的生存期

变量的生存期分为 静态生存期和动态生存期

int g_i  // return 后结束

int main(void)

{

        auto int k; //加上auto关键字,表示 k 变量空间的开辟与销毁是自动的

        static int j; //  静态局部变量,在全局区,不定义,默认为0

        int i;  //  return 前结束

        register int p; // 表示变量 p 被开辟在寄存器中

        printf("Hello World!\n");

        return 0;

总结;在栈上的具有动态生存期,在全局区上的,具有静态生存期。

四.extern声明外部变量

        知识碎片:  1.     :vsp func.c  在同一个窗口下新建一个func.c文件 

                          2.     :set mouse = a   允许两个窗口切换鼠标

// func .c 文件

int add(int a,int b)

{

        int sum = a + b;

        return sum;

}

static int g_a;   // 这里的static表示  此时g_a只能在func.c中用

static int sub(int a, int b)  //这个函数只能在func.c中被调用

{

        return 0;

}

 //fun.h文件,且编译时,头文件不参与编译

extern int add(int a,int b);   //函数的声明

//main.c文件 

#include "func.h"  //包含了该头文件

int main(void)

{

        int a = 10;

        int b = 20;

        printf("%d\n",add(10,20));  //直接调用函数

        return 0;

}

gcc -oapp main.c func.c

进行编译 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值