ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-03 23:31:18  阅读:212  来源: 互联网

标签:arr const int 左值 C语言 报错 arr3 指针


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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有