c语言中规定 赋值运算符的左边必须是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中规定 赋值运算符的左边必须是啥?相关的知识,希望对你有一定的参考价值。

参考技术A 必须是变量名(如a=2),也可以是
*指针变量名(这相当于给指定的内存地址赋值,如*p=2)
C99或者C++还允许引用名写在赋值号左边
参考技术B c语言中规定
赋值运算符的左边必须变量,不能是常量。
例如:int
i=1;i就是一个变量。
赋值操作符(=)用于对变量赋值,左边必须是变量,右边是可以当成数字使用的内容,赋值操作符的优先级很低,但是比,优先级高。
多个赋值操作符从右向左计算。
复合赋值操作符(+=,-=,*=,/=),其优先级和赋值操作符的优先级一样。
swap.c
#include
<stdio.h>
int
main()

int
num
=
3,
num1
=
7;
/*int
num2
=
0;
num2
=
num;
num
=
num1;
num1
=
num2;*/
/*num
=
num
+
num1;
num1
=
num
-
num1;
num
=
num
-
num1;*/
num
=
num
-
num1;
num1
=
num
+
num1;
num
=
num1
-
num;
printf("num是%d,num1是%d\n",
num,
num1);
return
0;
参考技术C 1.
必须是变量
2.
因为要赋值给左边,所以左边必须是一个可以存储东西的单元
3.
这是规定的,必须是变量
参考技术D 赋值运算符左侧只能是变量,而不能是常量或者表达式。右侧可以是表达式包括赋值表达式。规定最左边变量所得到的新值,就是整个赋值表达式的值,
如果赋值运算符的两侧类型不一致,在赋值前系统将自动先把右边的表达式所求得的数值按赋值号左侧变量的类型进行转换,
就这么多了,哪里不完全待修改还请指正。
第5个回答  2019-03-31 左边必须是一个变量,类型可以不同。
两边的类型不同也可以赋值,强制转型比如:
char
s[20];
int
x=(int)s

c++重载赋值操作符的返回值是啥?

classname classname::operate=(classname)
……

返回值是this还是*this?可以是别的吗?
另外,点号(比如classname.function())和解引用*哪个优先级更高?

通常返回的是引用,比如classname&,原因是重载的操作符要尽可能和内建操作符看上去一致。比如我们对int赋值时,

int i, j;
i = j = 0

如果我们不返回引用,假设返回void,那么就不能连续赋值了。重载的目的之一是为了提供语法上的方便,并且在适当情况下要保持和内建操作的一致性,这样就不会违反直觉了。

返回引用的话,我们就必须返回对象而不是对象的指针,所以必须是*this,而this是指针。


点操作符的优先级比解引用的高。

参考技术A 1 classname classname::operate=(classname)........... 的返回值 就是 classname , 但是不是*this 这要看内部实现.
比如:
1)classname classname::operate=(classname)return *this; //就是*this
2)classname classname::operate=(classname)

static classname data;

................................

return data; //就不是.



2 点的优先级高. 但拿不准,最好用括号标明.
参考技术B 我只知道解引用的优先级小于点好

以上是关于c语言中规定 赋值运算符的左边必须是啥?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中num是啥意思

C语言中num/=10是啥意思

C语言中,赋值运算符两边应该注意的全部问题?非常感谢!

C语言基础学习运算符-赋值运算符

c语言赋值是啥?

C语言,自动类型转换怎么做?