使用内存地址在不带指针的 C 函数中更改数组

标签 c arrays function sorting pointers

在教程点上学习指针、数组和函数时,我意识到我可以通过在主函数中创建一个新数组、创建一个指针并分配函数的返回值来实现从函数返回数组的目标指向此指针,然后在 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/

相关文章:

javascript - 如何根据离散步骤插值进度?

r - dcast 和汇总到一个函数中 - 参数丢失

c - 如何为 ncurses 直方图程序缩放图形最小值

c - 超出时间限制错误。这是什么意思?

C - 如何设置函数指针的关联数组?

c - 有向图上的 DFS

c# - 如何根据某个数字重复特定顺序的数组元素?

javascript - 如果出现平局,如何在 javascript 中返回较小的数字?

android - 动态添加新字符串到资源字符串数组

javascript - 工厂功能原型(prototype)