[英]Why does reverse function changes the original string value in C?
此代码只是反转字符串。 在这里,字符串是通过值传递的,然后如何反转原始字符串,因为我没有将函数返回值分配给任何变量。
#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语言中的一流数据类型。 因此,您不能在C中按值传递字符串,即参数:
char str1[]
是相同的
char* str1
例如,尝试检查函数内部的sizeof(str1)
-无论传递的字符串大小如何,您都将发现它与sizeof(char*)
相同。 您还可以观察到printf( "%p\\n", str1 );
示出str1
在reverse()
是指在相同的存储器中str1
在main()
或简单地观察在调试器相同)。
因此,实际上您是通过引用传递的,这就是修改调用者字符串的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.