在教程点上学习指针、数组和函数时,我意识到我可以通过在主函数中创建一个新数组、创建一个指针并分配函数的返回值来实现从函数返回数组的目标指向此指针,然后在 main 函数中使用 for 循环递增指针以将数组的值重新分配给排序函数内部的数组。
但是我想知道,既然内存在函数返回后返回到堆栈,为什么数组中的值没有被重新分配给其他东西,其次有没有一种方法我可以使用内存地址改变实际数组中的排序函数里面的main函数然后返回void?我正在使用冒泡排序算法,这是我当前的排序函数;
#include <stdbool.h>
int *arr_sort(int *arr){
int *ptr = arr;
bool flag = true;
while(flag){
flag = false;
int i = 0;
for(i;i<4;i++){
if(arr[i]>arr[i+1]){
flag = true;
arr[i]+=arr[i+1];
arr[i+1] = arr[i]-arr[i+1];
arr[i]-= arr[i+1];
}
// printf("%d : %d\t%d : %d \n",i,arr[i],i+1,arr[i+1]); *Included to display the values as they are being switched
}
printf("\n\n");
}
return arr;
然后 main 中的 for 循环将我的数组(称为 unsorted_array)分配给指针,因为它通过在排序函数内创建的数组递增
ptr = arr_sort(unsorted_array);
for(j;j<5;j++){
unsorted_array[j]=*(ptr+j);
整个事情作为一个程序运行,但我只是想知道是否有兴趣积累知识(很久没有用 C 编程了),有没有更好的方法来做到这一点?
最佳答案
不需要从你的函数返回数组。只需将您的函数定义为
void arr_sort(int *arr){
bool flag = true;
while(flag){
flag = false;
int i;
for(i = 0; i < 4; i++){
if(arr[i] > arr[i+1]){
flag = true;
arr[i]+=arr[i+1];
arr[i+1] = arr[i]-arr[i+1];
arr[i]-= arr[i+1];
}
}
printf("\n\n");
}
}
对 arr
的任何和所有更改都将对 main
中的数组进行。
关于使用内存地址在不带指针的 C 函数中更改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20872337/