有人可以解释错误吗?

标签 c arrays compiler-errors

我下面有一个 C 程序,在函数 func 中有两个 for 循环。在第一个 for 循环中,递增数组变量 a 时没有“需要左值”错误,但在第二个循环中递增数组变量 c for 循环,编译器会给出“需要左值”错误。为什么?

#include<stdio.h>
#include<string.h>
void func(char a[],int n);

int main(int argc,char **argv){

    char * s="Happy ,People\n\n";
    func(s,strlen(s));

    return 0;
}

void func(char a[],int n){
    for(int i=0;i<n;i++){
        printf("%c",*a++);      //This works fine — no lvalue error here
    }

    char c[]="Happy ,People\n\n";
    for(int i=0;i<n;i++){
        printf("%c",*c++); // there is error coming here lvalue Required
    }
}

最佳答案

在函数中,c是一个数组。数组的名称是一个常量。您不能增加或减少它。

与流行的神话相反,数组和指针之间存在差异。

在函数原型(prototype)中使用 [] 会使事情变得困惑,因为它们确实标识了指针。你会得到相同的结果:

void func(char *a, int n)
{
    for (int i = 0; i < n; i++)
        printf("%c",*a++);
    char c[] = "Happy, People\n\n";
    for (int i = 0; i < n; i++)
        printf("%c",*c++);
}

关于有人可以解释错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372257/

相关文章:

c - 当一个函数被另一个函数调用时,它的技术术语是什么?

c++ - 数据未存储在数组中

javascript - 如何使用多个键按对象的值对对象进行排序?

javascript - javascript 中有没有一种好方法可以从 javascript 对象(而不是数组)中删除 Falsy 值?

C 编程,在一个函数中进行多次计算

c++ - GDB 如何知道它必须在指定的断点处中断?

c - 用户空间中的文件系统 (FUSE) 编译错误

java - 为什么使用基类作为方法引用会导致编译器错误

c++ - 模板类容器自动转换问题

c - 使用可变变量格式化