首页 > 解决方案 > 当我想保护对向量的修改时,如果尝试使用 const 子句,为什么它不起作用?

问题描述

在我正在研究的书中,它说如果我将向量传递给函数,则向量的名称始终被视为指针。事实上就是这样。但我不明白为什么编译器允许在第一个函数中使用 const 子句,而在第二个函数中(我使用指针搜索元素之间的最大值)不。在函数中,我只想防止修改向量。

#include <stdio.h>

int find_largest(const int a[], int n);
int find_largest_with_pointer(const int *vettore, int n);

int main(void) {
    int my_number[] = {5, 7, 90, 34, 12};
    int n = sizeof(my_number) / sizeof(my_number[0]);
    int *pmy_number = my_number;

    printf("%d\n", find_largest(my_number, n));
    printf("%d\n", find_largest(pmy_number, n));
    printf("%d\n", find_largest_with_pointer(my_number, n));
    printf("%d\n", find_largest_with_pointer(pmy_number, n));

    return 0;
}

int find_largest(const int a[], int n) {
    int i, max;
    max = a[0];

    for(i = 0; i < n; i++)
        if(a[i] > max)
            max = a[i];

    return max;
}

int find_largest_with_pointer(const int *vettore, int n) {
    int *i, max = *vettore;

    for(i = vettore; i < vettore + n; i++)
        if(*i > max)
            max = *i;

    return max;
}

标签: carrayspointersparameter-passingcc

解决方案


由于vettore是指向 的指针const int,因此您必须i具有相同的类型。

const int *i;
int max = *vettore;

for(i = vettore; i < vettore + n; i++)

推荐阅读