我试图保护 my_sum_array 函数的 -a- 数组免受更改。在功能 block 中,我没有对 -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;
}
最佳答案
警告是由 for
循环中的赋值 p = a
引起的。该变量被定义为 int *p
,一个指向 非常量 int
的指针。警告是正确的,“从 const int *
到 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
循环中。
关于c - 为什么即使不更改变量,const 也不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58783606/