【发布时间】:2014-01-19 06:35:27
【问题描述】:
在教程点上学习指针、数组和函数时,我意识到我可以通过在主函数中创建一个新数组、创建一个指针并分配函数的返回值来实现从函数返回数组的目标到这个指针,然后在 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 编程了),有没有更好的方法来做到这一点?
【问题讨论】:
-
w/o 是什么意思?
-
是的,抱歉,不想让标题太长
-
for(i;i<4;i++){是假的。你的意思是:for(i=0; ...? -
不。 int i 在 for 循环外初始化
标签: c arrays function sorting pointers