2 never setttle Never_Setttle 于 2016.03.19 13:11 提问

vs2015左操作数必须为左值

#include
#include

struct nameinfo
{
char name[50];
char phone[50];
int num[20];
};

void main()
{
struct nameinfo a;
a.num=120;//左操作数必须为左值
pritnf("%d", a.num);
system("pause");

}

这是为什么?

3个回答

oiu1010110
oiu1010110   2016.03.19 13:39
已采纳

//在这里你的num是一个数组,a.num表示这个数组的首地址(可看下面运行结果为16进制地址),这个地址是确定的,我们不可以对其进行赋值
//对变量才可以进行赋值操作
void main()
{
struct nameinfo a;
//a.num=120;//左操作数必须为左值
printf("%p", a.num);
system("pause");
}
图片说明

oiu1010110
oiu1010110   2016.03.19 13:43

//这样才可以 数组名表示首地址
void main()
{
struct nameinfo a;
a.num[0]=120;//左操作数必须为左值
printf("%d", a.num[0]);
system("pause");
}
图片说明

qq_34343660
qq_34343660 谢谢!
2 年多之前 回复
Longyu_wlz
Longyu_wlz   2016.03.20 11:48

在C语言中,数组名表示的是数组的首地址,是一个地址常量。既然是常量,就不能作左值。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
如何理解左操作数必须为左值
声明:本博文用于学习总结及工作心得
由“左操作数必须为左值”引起的反思
今日写一个程序无论如何也调不好,后来一步步做改动筛选,直到筛到这一步 bool in_word=true; char ch; while (ch=getchar() && in_word){}循环到这一步无论如何都不继续进行,于是我就改变了一下顺序。ch=getchar(); while(in_word){}程序又可以正常运行了,遂将获取字符的语句顺手加到了后面。while (
编译错误了:”=”的左操作数必须是左值的解释
也许有的人在编写代码的时候写过这种代码: #include "iostream.h" int main() {     int x;     1=x;                  cout return 0; } 当然会编译错误了:说”=”的左操作数必须是左值; 当然大家想想也都能明白: 赋值操作符的作用是把右边的数赋值给左边,而此时左边是个常量,那么赋值当然不会成功;
对于左操作数必须为左值的问题
C++中只有返回引用或指针时,返回值才能为左值,这时才能对返回值进行操作。                          而返回值则不能为左值,也不能对返回值进行操作。 例如: 1.返回一个值。 class tesA { public: tesA(){a=2;} int geta(){return a;} private: int a; }; int main(
在C++中,为什么前自增操作生成左值,后自增操作生成右值?为什么有这样的区别? .
左值意味着这个值是内存里一个可访问的地址,右值表示一个数据(可能没有确切的地址) 比如说 ++i 先将 i 所存放的数加一,再返回i,即&(++i)是有意义的,可以作为一个左值, 而 i++ 将 i的值加一,并且返回没有增加前的i,(i++先保存i原来的 值 ,再将i的值加一, 然后返回未加一之前的 值)这个时候这个(i++)是一个数字,没有固定的存放地址,所以只能作为右值了. 所以: (
操作符的左操作数
最佳类跟踪最大值和最小值,它迄今所。我们重载运算符的3倍,所以我们可以把两个极小极大的对象在一起,或添加到该对象的整数。 这个例子产生的结果: 结果:(3,16) 你会注意到,我们增加了mfinal最大值和最小值。 让我们谈一点关于如何“极小极大mfinal = M1 + M2 + 5 + 8 + m + 16”评价。记住运算符+比运算符=更高的优先级,和运营商+评估从左到右,所以M1 +
非常量引用的初始值必须是左值
问题:void increment(double& x) { x+=1.0; } int n=5; increment(n);上述代码错误“非常量引用的初始值必须是左值”因为 int 和double 类型不一致,首先会执行隐式类型转换,产生一个临时变量。const double tmp=(double)n这样传给函数的就是一个常量。用一个常量(右值)对非常量类型引用赋值,会出错。修改1:vo
非常量引用的初始值必须为左值的问题
原文地址:非常量引用的初始值必须为左值的问题作者:逆光Summer 首先,先看下面一个例子: eg.1 #includeiostream> usingnamespace std; int main(){ int i =2; double &r =i; return 0; } gcc error: invalid initialization of r
"非常量引用的初始值必须为左值"
非常量引用的初始值必须为左值
C++中出现“IntelliSense: 表达式必须是可修改的左值”的Bug解决
说明:在学习算法导论,需要写一嵌套的小程序,题目是: Consider a three-parameter recursive function w(a, b, c): if a 1 if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20) if a w(a, b, c-1) +