在C语言中通过引用传递指针 对于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++背景下的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,我也知道c不允许在函数中通过引用传递,那么我如何解决这个问题呢?在c中,通过传递指向所需类型的指针来模拟通过引用传递。这意味着,如果您有一个int*要传递给一个可以修改的函数,即int*的更改在调用方中可见,那么该函数应该接受int** 然而,在你的具体情况下,这不是你想要的。您只需要将int*传递给函数,然后它就可以通过[]操作符隐式地取消引用,并更改数组的元素 void sort(int *arr, int s, int e) { int temp = 0, i, j; for (i

我也知道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;
        }
    }
  } 
}

在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;
        }
    }
  } 
}

在C中没有引用这样的东西

向函数传递指针不会复制指针所指向的对象

void foo(int* array);
然后可以通过延迟指针来访问元素

int a = *array; //dereferencing the pointer. Getting the first element.
int b = array[0]; // does the same thing.
int c = *(array + 1) // second element. Pointer shifts by 1 * sizeof(type) bytes
int d = array[1] // second element again
像这样传递一个指针与传递一个带有单词sizence的整数具有相同的开销。指针下面就是整数

如果要将指针传递给数组,则应将其作为双指针**传递。这几乎相当于将其作为引用传递,因为您可以更改函数中的指针。 用例:

void foo(int** array) // passing a double pointer
{
    //....
    *array = theNewCollection;
    //...
}
调用此函数应按以下步骤进行

int* arr = malloc(sizeof(int)*10);
foo(&arr);

在C中没有引用这样的东西

向函数传递指针不会复制指针所指向的对象

void foo(int* array);
然后可以通过延迟指针来访问元素

int a = *array; //dereferencing the pointer. Getting the first element.
int b = array[0]; // does the same thing.
int c = *(array + 1) // second element. Pointer shifts by 1 * sizeof(type) bytes
int d = array[1] // second element again
像这样传递一个指针与传递一个带有单词sizence的整数具有相同的开销。指针下面就是整数

如果要将指针传递给数组,则应将其作为双指针**传递。这几乎相当于将其作为引用传递,因为您可以更改函数中的指针。 用例:

void foo(int** array) // passing a double pointer
{
    //....
    *array = theNewCollection;
    //...
}
调用此函数应按以下步骤进行

int* arr = malloc(sizeof(int)*10);
foo(&arr);

为什么需要通过引用传递arr?你永远不会改变它。指针和数组的工作方式与你认为的不同。指针不是数组。复制指针时,不会复制数组。复制指针没有害处。这里不需要通过引用传递任何内容。为什么需要通过引用传递arr?你永远不会改变它。指针和数组的工作方式与你认为的不同。指针不是数组。复制指针时,不会复制数组。复制指针没有害处。这里不需要通过引用传递任何内容。