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