Tag: 左值

条件运算符中的“错误:左值作为赋值的左操作数”

我是C的新手,今天我学会了“?” 运算符,它是if-else语句的简短类型。 但是,当我执行此代码时: int b; int x; b=3<2?x=12:x=34; 我收到错误“错误:左值作为赋值的左操作数需要左值”。 我不明白为什么会这样。 我想到的过程是程序首先将34分配给x,然后将x的值(即34)分配给b。 另一方面,我可以使用该语句作为 int b; int x; b=3<2?x=12:(x=34); 没有任何错误。 我查看了我的书,但没有任何帮助。 为什么我不能使用第一个语句? 我的电脑试图做什么? 谢谢…

尝试递增数组时出现“左值”错误

可能重复: 数组名是C中的指针吗? 假设我有一个char数组,说arr和arr将代表第一个元素的地址,所以arr ++应该是完全合法的,那么为什么编译器会说’左值’。 如果我这样做:arr = arr + 1那么为什么它是无效的转换。 我只是一个一个地增加指针。 编译器告诉LHS操作数类型是char [4]但是在RHS上它是char *。 main() { char arr[]={‘a’,’b’,’c’,’d’}; for(;arr!=arr+4;arr++) //lvalue required printf(“%c”,*arr); }

将数据作为副作用提供有效类型吗?

假设我有一大块动态分配的数据: void* allocate (size_t n) { void* foo = malloc(n); … return foo; } 我希望将foo指向的数据用作特殊类型type_t 。 但是我想稍后这样做,而不是在分配期间。 为了给分配的数据一个有效的类型 ,我可以这样做: void* allocate (size_t n) { void* foo = malloc(n); (void) *(type_t*)foo; … return foo } 根据C11 6.5 / 6,这个左值访问应该是有效类型type_t : 对于没有声明类型的对象的所有其他访问,对象的有效类型只是用于访问的左值的类型。 但是,行(void) *(type_t*)foo; 不包含任何副作用,因此编译器应该可以自由地优化它,我不希望它生成任何实际的机器代码。 我的问题是:上面的安全措施是什么? 是否将数据作为副作用提供有效类型? 或者通过优化代码,编译器是否也会优化掉有效类型的选择? 也就是说,使用上面的左值访问技巧,如果我现在调用上面这样的函数: int* i = allocate(sizeof(int)); *i = something; 这是否会导致严格的别名违规UB,或者是现在的有效类型int […]

条件运算符中的赋值有什么问题?

有一个错误。 在以下代码中为[i]赋值是不对的? 或条件运算符出了什么问题? #include #include int main(){ char a[12]=”sumit tyagi”; int i=0; while(a[i]!=’\0′){ a[i]>90 ? a[i]=a[i]-32 : a[i]=a[i]+32; //error in this line i++; } printf(“\n %s”,a);

转换错误:左值作为赋值的左操作数需要左值

所以我试图使用ether_aton()返回一个struct ether_addr * 。 我试图把它放在我的struct ether_header *eptr (来自net / ethernet.h)中,它有ether_shost成员。 我试过这个: struct ether_header *eptr; /* net/ethernet.h */ … (struct ether_addr*)(eptr->ether_shost) = ether_aton(SRC_ETHER_ADDR); 这给了我”Error: lvalue required as left operand of assignment” 我知道我只是没有正确地投射,但无法弄清楚如何。 编辑:结束了它。 谢谢你的帮助。 struct ether_addr* eth_addr = ether_aton(SRC_ETHER_ADDR); int i; for(i=0; iether_shost[i] = eth_addr->ether_addr_octet[i]; 只需要分别分配每个八位字节。

为什么左值需要作为增量操作数错误?

为什么lvalue需要作为增量操作数Error a = b +(++ c ++); ? 只想同时将’b +(c + 1)’分配给’a’并将’C’增加2。 我是初学者刚想要澄清什么是“LVALUE ERROR”实际上是什么? main() { int a=1,b=5,c=3; a=b+(++c++); printf(“a=%db= %dc= %d \n”,a,b,c); }

数组名称不是左值的原因是什么?

例如, int x[10]; int i = 0; x = &i; //error occurs! 根据C – A参考手册 ,数组名称不能是左值。 因此,x不能是左值。 但是,数组名称不能是左值的原因是什么? 例如,为什么第三行会发生错误?

解除引用的指针是否是有效的左值?

假设定义: int i = 10; int *p = &i; 为什么* pa有效左值: *p+=10; 不应该* p计算存储在&i的int的值,即。 10,因此生成“不是左值”错误?

打印返回结构的成员

我在打印从函数返回的结构的成员时遇到问题: #include struct hex_string { char a[9]; }; struct hex_string to_hex_string_(unsigned x) { static const char hex_digits[] = “0123456789ABCDEF”; struct hex_string result; char * p = result.a; int i; for (i = 28; i >= 0; i -= 4) { *p++ = hex_digits[(x >> i) & 15]; } *p = 0; printf(“%s\n”, result.a); /* works […]

表达式必须是可修改的L值

我这里有char text[60]; 然后我做了一个if : if(number == 2) text = “awesome”; else text = “you fail”; 并且它总是说表达式必须是可修改的L值。