0
このコードは文字列を逆順にしています。ここでは文字列が値渡しされ、関数戻り値を任意の変数に代入していないので、元の文字列をどのように逆にしますか?なぜreverse関数が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);
}
結局のところ、文字列が値渡されないのでしょうか? – juanchopanza
'reverse(str1、0、size - 1) 'を呼び出すと、文字列のコピーではなく元の文字列のアドレスを関数に渡しているので、関数は元の文字列を変更します。 Cでは、シンボル 'str1'は文字列/配列のアドレスを表していますので、値渡しです。アドレス*の*値を渡すだけです。これは、C構文が配列に対して機能する方法です。配列を値で直接渡すための構文はありません。 – lurker
文字列がまったく渡されていません。それはCの仕組みではありません。あなたがやっていることは、文字列への参照を渡すことです(これは値渡しです)。 – Taelsin