我有一个小问题,我想了解指针...... 编译时我发现了这个错误:
error: lvalue required as left operand of assignment
我的代码就是这个:
typedef struct _matrix_info
{
unsigned int matrix[2][5][4];
}matrix_info_t;
static matrix_info_t matrix_custom_policy = {....}
matrix_info_t* matrix_custom_get(void)
{
return &matrix_custom_policy;
}
static matrix_info_t matrix_policy[3] =
{
// Only the first 2 cases are initialized
........
}
main()
{
.....
// the third case is initialized here;
&(matrix_policy[3]) = matrix_custom_get();
}
你知道我为什么会出现这个错误吗?我应该用memcpy而不是吗? 提前谢谢。
答案 0 :(得分:2)
此表达式
&(matrix_policy[3])
创建一个等同于表达式
的临时对象matrix_policy + 3
反过来不是左值,可能不会被分配。
事实陈述
&(matrix_policy[3]) = matrix_custom_get();
可以像
一样重写(matrix_policy +3 ) = matrix_custom_get();
当然是无效的陈述。
考虑到您在此语句中使用了错误索引,因为根据数组定义的索引的有效范围
static matrix_info_t matrix_policy[3] =
{
//...
};
是[0, 2]
您的意思是以下内容吗?
matrix_policy[2] = *matrix_custom_get();
答案 1 :(得分:1)
在main()函数中,你正在使用&运算符,它将返回变量的地址。赋值运算符左侧的对象应该能够保存您指定的值。不要使用&使用数组成员,因为它只代表地址而不是数组成员。
答案 2 :(得分:0)
matrix_policy
是一个数组,并且数组元素的地址不能是C中可修改的左值,因此存在错误。
&(matrix_policy[3]) = matrix_custom_get();
但您可以在数组中存储值,如
matrix_policy[3] = <value>;
答案 3 :(得分:0)
&
获取变量的地址。结果是“rvalue”,即可以出现在赋值右侧的只读值。 “左值”可能出现在作业的左侧,可以分配给它。您无法重新分配变量的地址。
您的matrix_custom_get
会返回指向matrix_info_t
的指针。您想使用自定义矩阵覆盖matrix_info_t
的内容,因此您必须取消引用您获得的指针:
matrix_policy[2] = *matrix_custom_get();
请注意,正如Anton H指出的那样,您无法以三个条目的数组访问索引3处的项目。
答案 4 :(得分:0)
感谢您的回答和解释。
当然,索引错了[3],错字错误:)
所以现在我明白了,我不能改变地址而只改变价值。 来自M Ohem的解决方案工作正常,而且来自莫斯科的弗拉德通过解除引用指针。
非常感谢你。