簡體   English   中英

為什么反向函數會更改C中的原始字符串值?

[英]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 ); 示出str1reverse()是指在相同的存儲器中str1main()或簡單地觀察在調試器相同)。

因此,實際上您是通過引用傳遞的,這就是修改調用者字符串的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM