我用 const 修饰数组为什么要警告我呢?
这里是简单的对数组求和,执行结果也没错,就是会出个警告。const修饰数组,我也没改变数组元素的值啊。
---------------------------------------------------------------------------------------我是分割线
通过2楼的回复,const修饰过的变量可以通过指针来修改。比如
const int m = 5;
int *q = &m;
*q = 3;
printf("%d", m);
以上代码会输出6。
那这样const修饰符不是失去了原来常量的意义了吗?你要修改的话,用指针绕个弯照样能修改啊。那么const为什么不设置m这个地址的内存为只读呢,那样不就连指针都不能改了吗?
----------------------------------------------------------------------------------------------------
//上代码
程序代码:
#include <stdio.h> #include <stdlib.h> #define N 10 int sum_array(const int a[], int n); int main(){ int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sum; sum = sum_array(a, N); printf("%d", sum); return 0; } int sum_array(const int a[], int n){ int sum; int *p; sum = 0; for(p = a; p < a + n; p++) //这里警告,warning: assignment discards 'const' qualifier from pointer target type [enabled by default]| sum += *p; //每个单词我都认识,合一起就不知道是什么意思了 return sum; }
[ 本帖最后由 muyoucumian 于 2014-9-25 20:53 编辑 ]