c - 当我想保护对向量的修改时,如果尝试使用 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;
}
解决方案
由于vettore
是指向 的指针const int
,因此您必须i
具有相同的类型。
const int *i;
int max = *vettore;
for(i = vettore; i < vettore + n; i++)
推荐阅读
- php - 如果 user_id 和 post_id 相同,如何从我的数据库中删除一个赞?
- sonarqube - 无法将 SonarQube 与 SQL 服务器连接
- spring - 为什么我的 Spring 导入语句不起作用?
- ios - SCNLevelOfDetails 委托/通知
- oracle - Oracle DB Developer 导入 .dmp 时出错
- sql - 了解引用触发操作的工作原理
- unity3d - 如何从中间点开始 Vector3.Lerp?
- php - 在编辑器上更新 header.php 时,Wordpress 主题崩溃
- angularjs - 不能在 angular.js 中工作 ng-click,为什么我不明白
- php - 手动订单 - 使用前缀更新每个订单项目元标签