【发布时间】:2021-12-10 11:10:58
【问题描述】:
在编译下面给出的代码时,我得到了 error: lvalue required as left operand of assignment 语句 str+i = str+((len-1)-i); 和 str+((len-1)-i) = temp;。
为什么?
char* str_reverse(char *str, int len)
{
char *temp;
int i, mid;
if(len%2 == 0)
{
mid = len/2 - 1;
}
else
{
mid = (len-1)/2;
}
for(i=0;i<mid;i++)
{
temp = str+i;
str+i = str+((len-1)-i);
str+((len-1)-i) = temp;
}
return str;
}
【问题讨论】:
-
因为
str+i不是左值(例如参见What is an lvalue)。该语句不会按照您的意愿交换字符。应该是*(str+i)=*(str+((len-1)-i))。或者更简单的str[i] = str[len-1-i]。其他所有作业都一样 -
对不起,我忘了提这个:我想将
(str+((len-1)-i))的地址分配给str+i,而不是其中存储的值。 -
为什么?这是没有意义的。这根本不会交换字符。
-
我想反转存储在指针
str中的字符顺序。所以,我想重新分配它们的内存地址,这样:调用str[0]将返回str[(n-1)-0]的值。调用str[1]将返回str[(n-1)-1]的值。调用str[2]将返回str[(n-1)-2]的值。 . . .等等。 (我不知道这种方法是否有效,我是编程新手,因此我不太了解它的规则。)我想知道,如果这种说法不符合我的目的,为什么?跨度> -
@Algorithmophile 您不能单独重新分配数组元素的地址。这是一个数组的定义,它的元素都存储在连续的内存中。所以数组中每一个元素的地址总是与基地址有一个固定的偏移量,也就是数组的开头。如果你想重新排列数组的元素,重新排列值是你唯一的选择。
标签: c pointers reverse c-strings function-definition