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

标签 c constants

我试图保护 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/

相关文章:

c - 在 C 文件中读取 : how do execute fgets on a same file multiple times?

C++ : Error Initilializing Array Size with Const Variable in multiple files

c++ - 为什么 std::slice_array::operator= const?

c - 如何在c中预定义一个数组?

c - 使用 gcc 编译时,Tcl 解释器 undefined reference 错误

c - 逻辑运算符 || 的右侧操作数由于调用函数而具有持续的副作用(MISRA-C 2012Rule 13.5)

c - ^ scanf 修饰符实际上做了什么?

c - 将变量设置为 0 时出现段错误

java - 在 GWT 项目中使用常量接口(interface)

javascript - Javascript 中的 const 关键字作用域