传递在 C 中不工作的数组元素的地址——就像我做的那样
passing the address of array element NOT working in - C -- the way I did
我的交换函数和我将数组元素的地址传递给交换的方式没有造成任何影响我也试过像 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 的本地副本。所以当这个函数returns时,本地副本丢失了。所以你必须在指针所在的位置赋值。另外,下一行,
a=t;
您正在为一个值分配一个指针,这在 C 语言中是一个很大的禁忌。
所以,你的交换功能应该是这样的
void swap(char *a,char *b)
{
char t=*b;
*b=*a;
*a=t;
}
我的交换函数和我将数组元素的地址传递给交换的方式没有造成任何影响我也试过像 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 的本地副本。所以当这个函数returns时,本地副本丢失了。所以你必须在指针所在的位置赋值。另外,下一行,
a=t;
您正在为一个值分配一个指针,这在 C 语言中是一个很大的禁忌。 所以,你的交换功能应该是这样的
void swap(char *a,char *b)
{
char t=*b;
*b=*a;
*a=t;
}