传递数组元素的地址不在 - C 中工作 - 就像我所做的那样

问题描述

我的交换函数以及我将数组元素的地址传递给交换的方式没有造成任何影响我也尝试像 swap(&arr[2],&arr[3]) 一样传递它,但没有运气

void swap(char *a,char *b)
{
    int t=*b;
    b=a;
    a=t;
}

void main()
{
    char *arr=(char[]){'a','b','c','d','e','f'};
    int n=strlen(arr);
    swap((arr+2),(arr+3));
    for(int i=0;i<n-1;i++)
    {
        printf("%c \n",*(arr+i));
    }
}

解决方法

当您将事物传递给 C 中的函数时,参数被推送到堆栈(或存储在寄存器中,无论哪种方式,您都只有该变量的本地副本),而不是对该参数的引用。因此,当您传递指针并为其分配不同的值时,该分配仅对该函数的作用域有效。 所以在

void swap(char *a,char *b)
{
    int t=*b;
    b=a;
    a=t;
}

您正在将指针 b 的交换函数本地副本分配给 a 的本地副本。所以当这个函数返回时,本地副本丢失了。所以你必须在指针的位置分配一个值。另外,下一行,

a=t;

你正在分配一个指向一个值的指针,在 C 中是一个很大的不。 所以,你的交换函数应该是这样的

void swap(char *a,char *b)
{
    char t=*b;
    *b=*a;
    *a=t;
}