使用指针从C++中的数组中获取最大值
Getting maximum value from array in C++ using pointer
我想要使用指针从数组中获得最大值。但我没有得到准确的数值。请帮帮我。
#include <iostream>
using namespace std;
int main()
{
int* largest;
int a[5]={4,5,666,7,8};
largest=a;
for(int i=1; i<5; i++)
{
if(*largest<*(largest+i))
{
*largest=*(largest+i);
largest=largest+i;
}
}
cout<<*largest;
}
我得到的输出是7339544,而不是666。我不知道我做错了什么。
您在数组外进行索引,导致未定义的行为。
你在做这个
largest
|
v
| 4 | 5 | 666 | 7 | 8 |
^
|
largest + 1
然后
largest
|
v
| 5 | 5 | 666 | 7 | 8 |
^
|
largest + 2
然后
largest
|
v
| 5 | 7 | 666 | 7 | 8 | outside
^
|
largest + 3
(请注意,您也在修改数组,这是不应该的。(
主要问题是您试图同时将largest
用于三个目的:
- 迭代
- 存储最大值
- 存储最大值的位置
它应该只指向最大的数组元素;您应该只更改它的值,而不是它所指向的元素的值。
int main()
{
const int a[5] = {4, 5, 666, 7, 8};
const int* largest = a;
for (int i = 1; i < 5; i++)
{
if (*largest < a[i])
{
largest = &a[i];
}
}
cout << *largest;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int generateNumber(int lower_limit, int upper_limit);
void fillArr(int *arr, unsigned int arrSize, int lower_limit, int upper_limit);
void printElementsArr(int *arr, unsigned int arrSize);
int maxElementArr(int *arr, unsigned int arrSize);
int main()
{
char expression;
int l_l, u_l;
int arrSize;
do{
srand(time(0));
printf("Insert array size:n");
scanf("%d", &arrSize);
if(arrSize < 0){
while (arrSize<0){
printf("Insert positive array size:n");
scanf("%d", &arrSize);
}
}
int array[arrSize];
printf("Insert lower limit of an array:n");
scanf("%d", &l_l);
printf("Insert upper limit of an array:n");
scanf("%d", &u_l);
while(u_l<l_l){
printf("the upper limit (%d) is smaller then the lower limit (%d), set a new upper limit of an array: ",u_l,l_l);
scanf("%d",&u_l);
}
fillArr(array, arrSize, l_l, u_l);
printElementsArr(array, arrSize);
maxElementArr(array, arrSize);
getchar();
printf("If you want to end the program insert 'n' else insert any key: ");
scanf("%c",&expression);
}while(expression != 'n');
}
//---------------------------------------------------------------------------------------------------------
int generateNumber(int lower_limit, int upper_limit){
return rand() % (upper_limit-lower_limit)+lower_limit;
}
void fillArr(int *arr, unsigned int arrSize, int lower_limit, int upper_limit){
int i = 0;
for (i; i < arrSize; i++){
*(arr+i)= generateNumber(lower_limit, upper_limit);
}
}
void printElementsArr(int *arr, unsigned int arrSize){
int i = 0;
printf("n");
for (i; i < arrSize; i++){
printf("%d.element of an array: %dn" ,i+1, *(arr+i));
}
}
int maxElementArr(int *arr, unsigned int arrSize){
int i = 1, max= *arr;
for(i; i<arrSize; i++){
if(max < *(arr+i)){
max = *(arr+i);
}
}
printf("nThe max element of an array is: %dn",max);
}
因为这段代码由多个部分组成,所以我为每个问题创建了每个独立的函数,然后我最初在主函数中调用它们,除了生成数字的函数。我在函数中使用了这个,它用数字填充数组。我创建了一个函数,用于生成随机数,用数字填充数组,并打印数组中的每个元素(数字(。我创建随机数生成器的原因是,它比具有预定义数量和数组大小的静态数组更具动态性。同样在调用填充和打印功能之前,首先,我向用户询问数组大小,如果数组大小低于0,它将要求用户插入一个正数,a我还向用户询问一个数组的下限和上限,如果上限低于下限,则一个包含上限低于上限信息的问题将反复弹出,并可选择插入新的上限,除非用户插入的数字高于下限。此外,如果他们想结束程序,整个程序都会循环到最后的问题。
#include <iostream>
using namespace std;
int main()
{
int* largest;
int a[5]={4,5,666,7,8};
largest=a;
for(int i=1; i<5; i++)
{
if(*largest < a[i])
{
largest = &a[i];// This works perfectly
//largest = largest+i; There is no meaning of this line
}
}
cout<<*largest;
}
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 使用指针从C++中的数组中获取最大值
- 获取字符串的长度并将其分配给数组
- 数组长度,为什么从命令行获取时不能使用它?
- 如何在 nlohmann 的 json 库中获取数组长度?
- 在c++中获取两个大int,并将它们存储在数组中
- 如何在C++中获取二维数组中最少的一列数?
- 从 numpy 数组获取指针以将图像发送到C++
- 指针数组.获取指针元素的值
- 循环以使用 cstring 数组 c++ 获取用户输入
- 一种从元组/数组获取参数包的方法
- 如何使用数组获取输入,并将其存储在record.h类的主类中的变量中
- 如何使用数组获取命令行参数
- 从 JSON 数组获取天气
- 布尔数组获取意外的默认值
- 填充列表<>使用数组获取错误的数字
- 如何在C++中为矢量数据结构中的二维数组获取用户输入,而不使用行和列上的两个for循环
- 在自定义库中操作2d C++数组-获取行数
- 使用数组获取测试结果
- 数组c++获取值