嵌入式Linux学习DAY12

二维数组函数

形参一维可以省略,长度不能直接获得(计算长度时会将数组当做指针),需要在实参中输入。

例如: int array(int a[3][4,int row]);其在计算机中实际以 int array(int (*a)[4],int row)存在。

位数——总线宽度(总线用以传输数据)———1.数据总线 2.控制总线 3.地址总线

在二维字符数组形式上,需要传递行数,因为操作多个字符串

实参:实参要有数组名与行数,如:array(a,row);

函数名(数组名,行数)

标识符的作用域和可见性问题

作用域:作用范围

      局部变量-----一定在某一个{}范围内

      全局变量-----不在任何一个{}范围内

可见性:

       程序运行到某个点,哪些标识符可见。

定义的标识符作用范围为上下两个花括号{}范围内,中间嵌套的花括号如果不另作定义,那么定义的值仍可以用。若内层与外层有同名标识符,则外层的被屏蔽。

在时间上:

         动态变量:自动申请自动释放,从定义时属于的语句开始,到语句结束时结束。

         静态变量:全局变量,在运行前同时存在不分先后,因此,在运行全局变量的时候,不能先                             定义一个确切变量(int a=10),再将该变量赋予另一个变量(int b=a)。(只能被                               初始化一次)     

                                                    例外:static加局部变量,使局部变量存到了全局区,成为静态变                                                                 量。

                                                               static加全局变量,将该变量限定在本文件中,使exterb无                                                                 效。

                                                               也可加函数前,效果全局变量一样。

                                                               register int a: 将a存到cpu寄存器中(建议性),使用后不                                                                                       可进行取地址操作。

         extern int a;   //拓展,表示该变量不在文件中,可以去其他文件中找(只能拓展其他文件的                                    全局变量),一般使用于再多文件编程中,如果想使用,可以用此函数作声                                     明。(编译时需要一起编译,如:gcc 1.c 2.c)

                                  也可加函数前,效果一样。

   在函数中,只有一维数组不需要传递长度(“\0”作为结束符)

指针(pointer)

特点:直接操作硬件

难点:缝合————指针+数组 / 函数 / 数据类型 / 指针自身

原理:内存的位置有具体编号,因此可以通过编号查找到他的位置。

数据类型——指针类型:储存的就是地址的位置编号

指针变量

语法:基类型* 指针变量名 = &空间变量名;

           基类型----数据类型,指针变量指向目标的数据类型

                *    -----表示此时定义的变量 是一个指针类型的变量,其为单目运算,运算数必须是指                               针类型的值(地址)

    指针变量名-----见名知意,类型与基类型一致。

    &空间变量名---获得空间的地址编号

例如:int *p;  //   表示定义了一个指针类型的变量

*p的运算过程

1.先拿出p变量中的值(地址)到内存中定位

2.从定位处开始,偏移出sizeof(基类型)大小的一块空间

3.把这块空间当做一个基类型变量来看    //运行一次,访问一次该地址中的值

运用:被调修改主调

           1.想修改谁,就把谁的地址传过去

           2.必须做*运算,实现修改。

p+1 指向了下一个基类型的数据,如在int 条件下,int p+1;若p的首地址为0x0000,则p+1的地址为0x0004.

数组的本质就是指针,*(p+i)等于p[i] 

 细节:对数组取空间变量名,不需要取值(&),直接输入即可

你可能感兴趣的:(学习)