图片是《C primer plus(第五版)》说的,但是本人程序居然可以编译,并且还成功改掉了常量数组的值,这是为什么?
#include<stdio.h>
#define INDEX 10
int main(void){
int ak[INDEX] = {1,2,3,4,5,6,7,8,9,10};
const int ar[INDEX] = {10,9,8,7,6,5,4,3,2,1};
int *pd;
pd = ar;
*pd = 0;
printf(“The ar1 is %d\n”,ar[0]);
printf(“The *pd is %d\n”,*pd);
return 0;
}
解决方案
20
简单说说:
编译器都会越来越智能
C语言来说: const int和 int 是两种不同的类型 这点一定要弄清楚。
从 const int 转换到 int 就会警告 这是C语言的规定
编译器都会越来越智能
C语言来说: const int和 int 是两种不同的类型 这点一定要弄清楚。
从 const int 转换到 int 就会警告 这是C语言的规定
40
C++下将通不过,C编译器类型转换时可能不做过多检查,所以可以将const int[]转换为int*
而C++下pd = ar;这一步会出错
而C++下pd = ar;这一步会出错
10
1. VS 不是 C 编译器,它是一个 C++ 编译环境。VS 对 C 的支持也就到了 2015 才好了一些。
2. 不是全部非法的东西编译器都会报错。使用非法的程序产生的任何后果都需要程序员本人负责。
2. 不是全部非法的东西编译器都会报错。使用非法的程序产生的任何后果都需要程序员本人负责。