const限制修改数组值的疑问
通过数组原型的声明限制数组值的改变程序代码:
#include <stdio.h> int add(int a[]); int main() { const int a[2]={1,100}; //a[0]=a[0]+1;//限制成功,编译器报错不能改变数组值 add(a);//限制失败,a[0]变为2 printf("%d",a[0]); return 0; } int add(int a[]) { a[0]++; return 0; }
可以看到调用add(a)后,限制失败。而我在声明和初始化数组的时候已经cosnt限制了,为什么限时失败了??
如果想在函数中限制改变数组,必须在函数声明和定义时的形参上限制吗?如下
程序代码:
#include <stdio.h> int add(const int *);//加const限制 int main() { const int a[2]={1,100}; //a[0]=a[0]+1;//限制成功,编译器报错不能改变数组值 add(a); printf("%d",a[0]); return 0; } int add(const int a[])//加const限制 { a[0]++;//编译器报错,不能更改 return 0; }
为什么第一种不可以限制修改数组值呢??