为什么反向函数会更改 C 中的原始字符串值?
Why does reverse function changes the original string value in C?
这段代码只是反转字符串。这里的字符串是按值传递的,那么它如何反转原始字符串,因为我没有将函数 return 值分配给任何变量。
#include <stdio.h>
#include <string.h>
void reverse(char [], int, int);
int main()
{
char str1[20];
int size;
printf("Enter a string to reverse: ");
scanf("%s", str1);
size = strlen(str1);
reverse(str1, 0, size - 1);
printf("The string after reversing is: %s\n", str1);
return 0;
}
void reverse(char str1[], int index, int size)
{
char temp;
temp = str1[index];
str1[index] = str1[size - index];
str1[size - index] = temp;
if (index == size / 2)
{
return;
}
reverse(str1, index + 1, size);
}
字符串和数组通常不是 C 中的 first-class 数据类型;因此,您不能在 C 中按值传递字符串,参数:
char str1[]
与
相同
char* str1
例如,尝试检查函数内部的 sizeof(str1)
- 你会发现它与 sizeof(char*)
相同,无论传递的字符串大小如何。您还可以观察到 printf( "%p\n", str1 );
显示 reverse()
中的 str1
指的是与 main()
中的 str1
相同的内存(或者只是在调试器中观察相同的内容)。
所以你实际上是通过引用传递,这就是调用者字符串被修改的原因。
这段代码只是反转字符串。这里的字符串是按值传递的,那么它如何反转原始字符串,因为我没有将函数 return 值分配给任何变量。
#include <stdio.h>
#include <string.h>
void reverse(char [], int, int);
int main()
{
char str1[20];
int size;
printf("Enter a string to reverse: ");
scanf("%s", str1);
size = strlen(str1);
reverse(str1, 0, size - 1);
printf("The string after reversing is: %s\n", str1);
return 0;
}
void reverse(char str1[], int index, int size)
{
char temp;
temp = str1[index];
str1[index] = str1[size - index];
str1[size - index] = temp;
if (index == size / 2)
{
return;
}
reverse(str1, index + 1, size);
}
字符串和数组通常不是 C 中的 first-class 数据类型;因此,您不能在 C 中按值传递字符串,参数:
char str1[]
与
相同char* str1
例如,尝试检查函数内部的 sizeof(str1)
- 你会发现它与 sizeof(char*)
相同,无论传递的字符串大小如何。您还可以观察到 printf( "%p\n", str1 );
显示 reverse()
中的 str1
指的是与 main()
中的 str1
相同的内存(或者只是在调试器中观察相同的内容)。
所以你实际上是通过引用传递,这就是调用者字符串被修改的原因。