c - 当我想保护 vector 的修改时,如果我尝试使用它,为什么 const 子句不起作用?

标签 c arrays pointers parameter-passing cc

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

#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;
}

最佳答案

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

const int *i;
int max = *vettore;

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

关于c - 当我想保护 vector 的修改时,如果我尝试使用它,为什么 const 子句不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618767/

相关文章:

c++ - 在线程中像回调一样调用 C

c - 我将如何使用递归来生成所有可能性?

c# - 陷入数组

c++ - "undefined-ness"修改 const 值的机制

c - 如何使用 iso_c_binding 声明指针指针?

c - 自动测试字符串处理功能

javascript - setTimeout 按值传递数组(在咖啡中)

javascript - 如何在网页上显示数组中的图像和文本?

C++ - *p vs &p vs p

c - 在 void 指针的指针值处赋值