【发布时间】:2019-09-15 19:47:06
【问题描述】:
我需要使用指针在数组中找到最小和最大的数;除此之外,我还需要在main函数中输出这些数字的地址。
我正在努力寻找号码的地址。问题是同一个号码有不同的地址。为什么会这样?
这是我得到的输出:
Please enter a value 0 - 4
Please enter a value 1 - 7
Please enter a value 2 - 2
0x7ffeefbff4fc,4
0x7ffeefbff500,7
0x7ffeefbff504,2
The min value is: 2
The max value is: 7
and address 0x7ffeefbff4f0
#define size 3
void Input (int arr[]);
void AdressOutput (int arr[]);
void MinAndMax (int arr[],int *min,int *max);
int main(void)
{
int arr[size];
int min=0,max=0;
Input(arr);
AdressOutput(arr);
MinAndMax(arr,&min,&max);
printf ("The min value is: %d\n",min);
printf ("The max value is: %d\n and address %p\n",max,&max);
return 0;
}
void Input (int arr[])
{
int i;
int *p=arr;
for (i=0;i<size;i++)
{
printf ("Please enter a value %d - ",i);
scanf ("%d",(p+i));
}
printf ("\n");
}
void AdressOutput (int arr[])
{
int i=0;
int *p=arr;
for (i=0;i<size;i++)
{
printf ("%p,%d\n",(p+i),*(p+i));
}
}
void MinAndMax (int arr[],int *min,int *max)
{
int i=0;
int *p;
p=arr;
*min=*p;
*max=*p;
for (i=0;i<size;i++)
{
if(*(p+i)>*max) //finding max
*max=*(p+i);
}
for (i=0;i<size;i++)
{
if(*(p+i)<*min)//finding min
*min=*(p+i);
}
}
我不明白为什么地址会发生变化以及如何创建一个函数来查找地址并允许我在主函数中打印出来?
【问题讨论】:
-
地址没有变化,
max是一个与arr完全不同的变量,所以它显然有不同的地址 -
在
AdressOutput中输出arr元素的地址,然后输出max的地址。两者都是存储在不同内存地址的独立变量。你不会期望它们是一样的。 -
@DavidC.Rankin 对,搞砸了,谢谢
-
别担心,这都叫学习,我们一开始都不知道......
标签: c arrays function pointers