即使变量未更改,为什么const不起作用?

问题描述 投票:0回答:3

我正在尝试保护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;
}

c const
3个回答
0
投票

p的类型更改为:

const int *p;

所以现在您最终得到:

const int * p;
int sum = 0;

2
投票

该警告是由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循环。


1
投票

将您的p指针设为:

    int const * p;

这里,p指针整数 常量整数

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.