c语言中关于声明和左值右值问题

float  *f()  中,()的优先级高于*  所以真正的理解意义为  float *(f());即返回值为双精度型的指针变量
 引入typedef  与  signal  举个例子:
    void  (*signal(int, void(*)(int)))(int);
 简化为:
typedef void (*HANDLER)(int);
HANDLER signal (int , HANDLER);
 上述是关于函数声明的问题,那么对于变量也存在生命的问题。要理解变量声明,初始化和赋值的问题。
    int a = 0int b;
    b=10;
 对于第一个来说这就是一个初始化,在内存中创建空间来保存a这个变量,并将a的值初始化为0,防止一个随机值。对于第二个来说就是一个声明,声明一个整形变量b。第三个就是一个赋值语句,将10这个至赋给变量b,这时候b当作左值来用,代表的是b变量的地址,也就是将10这个值放到b所对应的地址中去。
 那现在来说一说左值和右值到底意义是什么。
 1>左值可以理解为“=”左边的变量或者常量,对于变量来说,当左值来用的话,代表的是变量在内存中的地址,也就是址属性。
 2>右值可以理解为“=”右边的常量或者变量,对于常量来说就是他自身,对于变量来说就是变量中所存储的内容,也就是值属性
 比如写一个简单的交换函数
    void swap(int *a,int *b)
     {
        int temp = *a;
        *a = *b;
        *b = temp;
     }

对于这个变量来说,首先创建了一个临时变量temp,并将*a的内容初始化给temp,那么temp中保存的就是*a的内容,也就是a变量的地址,这时候*a就作为一个右值。第二步,*a = *b;根据上面所说的,*a这里就当作一个左值来使用,也就是*a的地址来保存*b的值,第三步也是同样的道理,最终交换的是a和b的地址,从而改变a和b的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值