为什么反向函数会改变C中的原始字符串值?

时间:2016-03-22 22:56:45

标签: c string reference reverse

此代码只是反转字符串。这里的字符串是按值传递的,然后它是如何反转原始字符串的,因为我没有将函数返回值赋给任何变量。

#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);
}

1 个答案:

答案 0 :(得分:0)

字符串和数组通常不是C中的第一类数据类型;因此,你不能在C中传递一个字符串,参数:

char str1[]

相同
char* str1

尝试检查函数内部的sizeof(str1) - 无论传递的字符串大小如何,您都会发现它与sizeof(char*)相同。您还可以观察到printf( "%p\n", str1 );中的str1显示reverse()str1中的main()引用的内存相同(或者只是在调试器中观察相同内容)。

所以你实际上是通过引用传递,这就是修改调用者字符串的原因。