问题遇到的现象和发生背景
同一个存储地址,为什么在 主函数main 和 被调函数 里 会打印出不一样的结果?
这是一个通过函数ReverseSortCopy()进行数组倒叙排列的任务,
因为不想改变原数组的数据,所以在ReverseSortCopy()中将原数组复制进新的数组,并在新数组中操作排序,完成后函数返回一个地址。
再通过这个地址在主函数中打印返回地址里的值(已排序完的新数组)。
可是,在ReverseSortCopy()函数里,根据地址可以正常打印结果,
但同样的地址在主函数里就打印出不一样的值,请问这是为什么?
问题相关代码,请勿粘贴截图
//设计一个函数,完成倒叙排列。
#include <stdio.h>
#define LEN 7
void ShowOriginI(const double arr[], int index); //打印原数组排列。
double * ReverseSortCopy(double *arr, int index); //倒序排列,并传回一个指向double型元素的指针。
int main(void)
{
double array[LEN] = {0.3, 6.2, 9.7, 4.2, 5.3, 1.4, 7.5};
double *p; //用来储存 排序函数 返回的指针。
printf("The original sort:\n");
ShowOriginI(array, LEN); //打印原数组排列。
printf("The reversed sort:\n");
p = ReverseSortCopy(array, LEN); //存地址。
printf("\n");
printf(" p address: %p\n", p); //地址和ReverseSortCopy里的新数组地址一致。
printf("*p: %.1f ", *p); //测试,打印地址里面的值。
printf("\n");
return 0;
}
void ShowOriginI(const double arr[], int index)
{
int i;
for (i = 0; i < index; i ++)
{
printf("%.1f ", arr[i]);
}
printf("\n");
}
double * ReverseSortCopy(double *arr, int index)
{
double CopyArray[LEN]; //新数组。
int i, j;
double temp;
double *p;
for (i = 0; i < index; i ++) // 将原数组数据 复制进 新数组。
{
CopyArray[i] = *(arr + i);
}
for (i = 0; i < index; i ++) // 倒序排列。
{
for (j = i; j < index; j ++)
{
if (CopyArray[i] < CopyArray[j])
{
temp = CopyArray[i];
CopyArray[i] = CopyArray[j];
CopyArray[j] = temp;
}
}
}
p = CopyArray;
for (i = 0; i < index; i ++) //用指针的方式,打印排列好的结果。
{
printf("%.1f ", *(p + i));
}
printf("\n");
printf("CopyArray's address: %p\n", CopyArray); //确认新数组的首地址,并在主函数中与 传回的地址 进行比对。
return p;
}
运行结果及报错内容
在主函数中打印了函数ReverseSortCopy()传回来的地址中的值,发现不对。求指点~