C/C++教程

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

本文主要是介绍【C语言常见报错----表达式必须是可修改的左值】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

  • 1、指向字符串的指针
  • 2、利用const声明的常量
  • 3、利用const声明的指针
  • 4、字面值
  • 5、利用 #define 声明的常量
  • 6、对比常见的一些误解

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、指向字符串的指针,保存的是字符串常量,而指向整型的指针,保存这个整形的地址。具体的内容还需要我去深究呀,学无止境!

这篇关于【C语言常见报错----表达式必须是可修改的左值】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!