嵌入式12——函数+指针

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

作用域:作用的范围     
    局部变量 --- 一定在某一个{} 范围内
    全局变量 --- 不在任何一个{} 范围内
可见性:
    程序运行到某个点,哪些标识符可见

标识符的可见性的规则:
1.先定义,后使用 
2.同一作用域中,不能有同名标识符
3.在不同的作用域,同名标识符,相互之间没有影响 
4.如果是不同的作用域,
  但是作用域之间存在嵌套关系,
 则,
 内层的作用域的同名标识符,会屏蔽外层的作用域的同名标识符。
(就近原则) 
时间上去区分:
   动态变量(局部变量-空间是开辟在栈上的--自动申请自动释放) (声明周期):
     从定义的语句开始,到所在的作用域范围结束 
     eg:
        栈上的 局部变量 
   静态变量 (全局变量)
     从程序一开始运行,就存在,
     直到程序结束时,销毁 
     eg:
        全局变量 
        static 局部变量 
     注意:
       全局变量(静态变量)  
    1.不能用变量进行初始化,只能常量初始化                     
    2.静态区的变量 
      只会被初始化一次 

    3.值具有 继承性       
                        
  auto int a; //这个是一个自动变量 --- 栈上开辟的变量 
  static int a; //静态区 
                //修饰的是 局部变量 
  register int a; //CPU 寄存器  
                  //建议性 
                  考点:
                    不能 & (取地址)
register int i;                  
for( i = 0; i < 100000000; ++i)
{
}
  extern int a;  //扩展 延伸 
                 //表示 此时这个a 不是在当前文件中定义的 ,
                 //如果要用,请到别的文件中寻找
                 //多文件编程 
                 //一般使用在多文件编程中:
                 //如果想在当前文件使用别的文件中的 全局变量 ,
                 //此时,可以使用
                 //extern int a; //做声明 
                 //相当于,把别的文件中的变量作用域扩展到当前文件

//全局变量前面 
  static 修饰局部变量
        //将局部变量 存储在了 全局区(静态区)
        //将局部变量的生命周期延长 
  static 修饰全局变量
       //表示 将全局变量 的作用域限定到本文件中 
       //别的文件中不能extern了     
  extern 可以放在函数声明中  --函数声明 
       //表示的意思 --将函数作用域扩展到当前文件
  static 加在函数前面 
       //  此时效果与修饰全局变量效果一样 
       // 将函数作用域限定到本文件中

二、指针变量
语法:
   基类型* 指针变量名;
   
   基类型 --- 数据类型
           //基本数据类型 
           //数组类型 
           //基类型 表示 指针变量 指向的目标的 数据类型
   *      --- 表示此时定义的变量 是一个指针类型的变量 
        
   指针变量名 --- 标识符命名规则 + 见名知意         
  
   int * p; //表示定义了一个指针类型的变量   
    
  int a = 10;
  float b = 1.23;
  int *p = &a; //指针变量 p 指向 了 int型变量a    

  p变量的数据类型 int * //指针类型 
  
  &b --地址值 ---类型? 
      float 
      b有一块内存空间 -- 放的是float类型的数据 
      &b ---得到了一块 存放着 float类型数据的 空间的地址 

      float *p1 = &b;'

float b = 10;

&b --- > 地址值的类型 -->float *      
         b的数据类型--决定了这块空间放的的数据类型 
         &b         --获得了 这块空间 的地址编号 
            
            float *  //这种类型的地址数据 
            
            float *p1 =  &b;
      
---------------------------------------------------------
指针变量:
访问变量时:
直接访问 
间接访问 通过地址访问到的 

* 指针运算符
* 单目运算 
 运算数必须是指针类型的值(地址)
 
 *p 过程
 1.首先拿出p指针变量中的值(地址) 到内存中定位 
 2.从定位处开始,偏移出sizeof(基类型)大小的一块空间 
 3.把这块空间当做一个 基类型的 变量来看  

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值