首页 > 解决方案 > 错误:需要左值作为一元“&”操作数,我已经看到了解决方案,但我无法将它们与我的查询相关联

问题描述

&(name+0)我可以通过替换&name[0]或只是轻松删除此错误name,但为什么我收到此错误?

#include<stdio.h>
#include<string.h>

void print(char *c)
{
   while(*c != '\0')
   {
       printf("%c",*c);
       c++;
   } 
   printf("\n");
}
int main(void)
{
    char name[]="Hello World!";
    print(&(name+0)); //ERROR here
    return 0;
}

标签: cstringpointersfunction-pointers

解决方案


用于

print(&(name+0)); //ERROR here

似乎是某种误会的结果。

首先要做的事情 - 为什么它是一个语法错误?

(name + 0)不计算为左值。因此,您不能获取该表达式值的地址。

判断某事物是否为左值的一种简单方法是问自己:我可以在赋值运算符的 LHS 上使用它吗?在您的情况下,您必须问:我可以使用

(name + 0) = <something>;

答案是不”。

如果要传递 to 的第一个元素的地址nameprint可以使用几种方法。

print(&(name[0]));  // Explicitly get the first element's address.
print(name);        // The array decays to the address of the first element.

推荐阅读