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

来源:互联网 发布:java dao设计模式 编辑:程序博客网 时间:2024/06/05 23:00
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
原创粉丝点击