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

    xiaoxiao2021-12-14  18

    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的值。

    转载请注明原文地址: https://ju.6miu.com/read-965043.html

    最新回复(0)