2015-02-08 71 views
1

我试过寻找答案/查看C库的指针,但不能确定正确的解决方案。我的问题涉及到更改函数的参数。我一直在阅读指针/函数,根据我的理解,如果函数接受(int x1),那么当函数完成x1时,函数外部的x1保持不变。但是,如果你传入一个int * x1,那么它就会改变。函数参数在C中的变化

我一直在尝试用它,我已经使用这个带有几分方法试过......

void sorting(int *arr, int size) { 
    int *i, *j, temp; 
    int *len = arr + size - 1; 

    for(i = arr; i < len; i++) { 
     for(j = i + 1; j <= len; j++) { 
      if(*j < *i) { 
       temp = *i; 
       *i = *j; 
       *j = temp; 
      } 
     } 
    } 
    int k; 
    for(k = 0; k < size; k++) { 
     printf("k: %d, arr[k]: %d \n", k, *(arr + k)); 
    } 
} 

什么,这将打印是一个完全排序的列表。然而,在我的主要功能,如果我打电话给这个...

int main() { 

    int temp[5] = {0, 2, 1, 3, 1}; 
    int *p = &temp[5]; 

    sorting(pa, 5); 
    print the values of pa... 

} 

然后,列表仍然未排序,如果打印出pa的值。

如果此问题已解决,是否有人可以将该问题链接,我将删除该帖子。

回答

2

你访问数组越界这里:

int *p = &temp[5]; 

有效的指标是[0, 5)。大概需要一个指针的第一个元素:

int *p = &temp[0]; 

但请注意,你可以传递一个数组期望一个指针的函数。在这种情况下,阵列衰减的指针的第一个元素:

sorting(temp, 5); 
+0

感谢关于外边界索引的尖端。你认为你可以澄清为什么我的* arr在函数中被排序,但在主函数中,在进行排序函数调用之后,它没有排序。 – Steve 2015-02-08 23:44:28

+0

@Someoldlady你的意思是你在解决了无界限访问后仍然存在这个问题? – juanchopanza 2015-02-08 23:48:04

+0

我意识到除了我的主函数出界外,还有一个小错误。它工作得很好,非常感谢! – Steve 2015-02-08 23:51:09