我正在尝试保护my_sum_array函数的-a-数组免受更改。在功能块中,我没有对-a-进行任何更改,但是我有一个警告(警告:从'const int *'分配给'int *'会丢弃限定词[-Wincompatible-pointer-types-discards-qualifiers] )。我知道我可以删除const来使程序正常工作,但是我想了解我是否缺少某些内容。
#include <stdio.h>
#define MAX 5
int my_sum_array(const int a[], int n);
int main(void) {
int values[5] = {4, 7, 1, 7, 8};
printf("The sum in my_sum_array is :%d\n", my_sum_array(values, MAX));
return 0;
}
int my_sum_array(const int a[], int n) {
int *p, sum = 0;
for (p = a; p < a + n; p++)
sum += *p;
return sum;
}
将p
的类型更改为:
const int *p;
所以现在您最终得到:
const int * p;
int sum = 0;
该警告是由p = a
循环中的分配for
引起的。变量定义为int *p
,它是指向non-const int
的指针。警告是正确的,“从int *
分配给const int *
会丢弃限定词”。就像您已经舍弃了a
指针参数的常数一样。
我将您的功能更改为:
int my_sum_array(const int a[], int n) {
int sum = 0;
for (const int *p = a; p < a + n; p++)
sum += *p;
return sum;
}
[p
定义为指向常量的指针,就像a
一样,并且也将其生存期限制为for
循环。
将您的p
指针设为:
int const * p;
即
这里,
p
是指针整数 常量整数