具有C ++背景知识的C编码相当新。我有一个简单的程序,可以使用函数对数组进行排序。我需要通过引用将int指针传递给sort()函数,以便编译器不会创建副本,并且在函数调用后将对数组进行排序。如果我不传递引用,则函数结束后,数组将保持未排序状态。
#include <stdio.h>
#include <stdlib.h>
void sort(int* & arr, int s, int e)
{
int temp = 0, i, j;
for (i=0;i<e;i++)
{
for (j=i+1;j<e;j++)
{
if (*arr[i]>*arr[j])
{
temp = *arr[i];
*arr[i] = *arr[j];
*arr[j] = temp;
}
}
}
}
int main()
{
int* arr = malloc(sizeof(int)*10);
int i;
for (i=0;i<10;i++)
arr[i] = i+1;
printf("Array before sorting:\n");
for (i=0;i<10;i++)
printf("%d ", arr[i]);
printf("\n");
sort(arr, 0, 10);
printf("Array after sorting:\n");
for (i=0;i<10;i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
我还知道c不允许在函数中进行引用传递,那么如何解决此问题?
在C语言中,通过传递指向所需类型的指针来模拟按引用传递。这意味着,如果您int *
要传递给可以修改的函数(即,对的更改int *
在调用者中可见),则该函数应接受int **
。
但是,在您的特定情况下,这不是您想要的。您只需要将一个传递int *
给您的函数,然后该函数就可以通过[]
运算符隐式取消引用并更改数组的元素。
void sort(int *arr, int s, int e)
{
int temp = 0, i, j;
for (i=0;i<e;i++)
{
for (j=i+1;j<e;j++)
{
if (arr[i]>arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句