其他分享
首页 > 其他分享> > 【C语言常见报错----表达式必须是可修改的左值】

【C语言常见报错----表达式必须是可修改的左值】

作者:互联网

常见表达式不可被赋值的左值汇总

1、指向字符串的指针

    //不可以,指向字符串的指针,保存的是字符串常量
    //char* arr = "AEIOUaeiou";
    //*(arr + 1) = 's';
    //printf("%s", arr);

但是:下述代码可以正常运行

    //可以
    char arr[] = "AEIOUaeiou";
    *(arr + 1) = 's';
    printf("%s", arr);

2、利用const声明的常量

    //不可以,利用const声明的常量是不可修改的左值
    //const int n = 0;  //也可以写成int const n;
    //n = 1;

3、利用const声明的指针

	//不可以,利用const声明的指针是不可修改的左值
    //int n = 0;
    //int* const p;
    //p = #

4、字面值

	//不可以,字面值是不可修改的左值
    //1 = 2;

5、利用 #define 声明的常量

    //不可以,利用 #define 声明常量是不可修改的左值
    //#define n 2;        //(写在首行)
    //n = 1;              //(main函数中)

6、对比常见的一些误解

    char* arr = "AEIOUaeiou";
    arr++;
    printf("%s", arr);   //输出:EIOUaeiou

    char arr1[] = "AEIOUaeiou";
    arr1++;  //错误
    printf("%s", arr1);  

    int arr3[] = { 1,2,3 };
    arr3++;  //错误
    int i = 0;
    for (i = 0; i < sizeof(arr3) / sizeof(arr3[0]); i++) {
        printf("%d ", arr3[i]);
    }

    int* arr3 = { 1,2,3 }; //错误
    arr3++;  //错误
    int i = 0;
    for (i = 0; i < sizeof(arr3) / sizeof(arr3[0]); i++) {
        printf("%d ", arr3[i]);
    }

上述错误分别为:
请添加图片描述
说明:
1、数组(字符数组)名是不可修改的左值,因为数组名不能当做指针进行偏移,否则就找不到数组了,这是与指针之间的一个区别
2、指向字符串的指针,保存的是字符串常量,而指向整型的指针,保存这个整形的地址。具体的内容还需要我去深究呀,学无止境!

标签:arr,const,int,左值,C语言,报错,arr3,指针
来源: https://blog.csdn.net/weixin_60866736/article/details/121708885