使用函数和指针的数组的最大和最小元素
Max and min element of an array using functions and pointers
我的任务是创建两个函数:max_el 需要return 指向数组中最大元素的指针的函数; min_el 函数需要 return 指向数组中最小元素的指针。到目前为止我有这个,对于一些例子它有效,对于一些它崩溃并且对于一些输出不正确。我真的不知道我哪里搞砸了
int *max_el(int *p1, int *p2){
int max,i;
for(i=p1; i<p2; i++){
if(*p1>*p2){
max=*p1;
}
p2++;
}
return p1;
}
int *min_el(int *p1, int *p2){
int min,i;
for(i=p1; i<p2; i++){
if(*p1<*p2){
min=*p1;
}
p2++;
}
return p1;
}
让我们先看看您的 max_el() 函数。
首先,您没有初始化最大值。如果你的编译器默认将它设置为 0,而你的所有数组元素都是负数怎么办?
此外,您正在将一个指针分配给一个 int -- 仔细看看。最后,看看你的 i 类型——这真的是你想要的吗?
由于多种原因,您的代码是错误的。缺少初始化、错误的分配、错误的比较等。例如,您希望 i
和 max
是指针而不是整数。
看看这个:
int *max_el(int *p1, int *p2)
{
int *max = p1; // Set the max pointer to point to first element
int *i;
for(i = p1 + 1; i < p2; i++)
{
if(*i > *max) // Compare current element with max element
{
max= i;
}
}
return max;
}
首先,您需要知道数组的大小。然后很容易找到最大的元素(和指向它的指针)
int *max_el(const int * restrict p1, size_t size)
{
const int *max = p1;
while(--size)
{
if(*max < *p1) max = p1;
p1++;
}
return (int *)max;
}
或使用您的原型:
int *max_el(const int * restrict p1, const int * restrict p2)
{
const int *max = p1;
while(++p1 < p2)
if(*max < *p1) max = p1;
return (int *)max;
}
我的任务是创建两个函数:max_el 需要return 指向数组中最大元素的指针的函数; min_el 函数需要 return 指向数组中最小元素的指针。到目前为止我有这个,对于一些例子它有效,对于一些它崩溃并且对于一些输出不正确。我真的不知道我哪里搞砸了
int *max_el(int *p1, int *p2){
int max,i;
for(i=p1; i<p2; i++){
if(*p1>*p2){
max=*p1;
}
p2++;
}
return p1;
}
int *min_el(int *p1, int *p2){
int min,i;
for(i=p1; i<p2; i++){
if(*p1<*p2){
min=*p1;
}
p2++;
}
return p1;
}
让我们先看看您的 max_el() 函数。
首先,您没有初始化最大值。如果你的编译器默认将它设置为 0,而你的所有数组元素都是负数怎么办?
此外,您正在将一个指针分配给一个 int -- 仔细看看。最后,看看你的 i 类型——这真的是你想要的吗?
由于多种原因,您的代码是错误的。缺少初始化、错误的分配、错误的比较等。例如,您希望 i
和 max
是指针而不是整数。
看看这个:
int *max_el(int *p1, int *p2)
{
int *max = p1; // Set the max pointer to point to first element
int *i;
for(i = p1 + 1; i < p2; i++)
{
if(*i > *max) // Compare current element with max element
{
max= i;
}
}
return max;
}
首先,您需要知道数组的大小。然后很容易找到最大的元素(和指向它的指针)
int *max_el(const int * restrict p1, size_t size)
{
const int *max = p1;
while(--size)
{
if(*max < *p1) max = p1;
p1++;
}
return (int *)max;
}
或使用您的原型:
int *max_el(const int * restrict p1, const int * restrict p2)
{
const int *max = p1;
while(++p1 < p2)
if(*max < *p1) max = p1;
return (int *)max;
}