「こんにちは」を表示するプログラムがありますが、その理由がわかりません。
scanf と printf の両方が読み取り/書き込み文字数を返すことは理解していますが、この場合はどのように機能しますか?
void main()
{
if(printf==scanf)
printf("hello");
else
printf("hi");
}
「こんにちは」を表示するプログラムがありますが、その理由がわかりません。
scanf と printf の両方が読み取り/書き込み文字数を返すことは理解していますが、この場合はどのように機能しますか?
void main()
{
if(printf==scanf)
printf("hello");
else
printf("hi");
}
関数を呼び出して結果を比較するのではなく、関数自体を比較しています。つまり、関数のアドレスを比較しています (関数名は多くのコンテキストで関数ポインターに変換されますが、これは 1 つです)。あなたが書いたものはこれと同じです:
/* this is the correct signature for main by the way, not `void main()` */
int main(int argc, char **argv) {
/* compare the address of printf to that of scanf */
if (&printf == &scanf) {
printf("hello");
} else {
printf("hi");
}
}
scanf
とは同じ関数ではないためprintf
、異なるアドレスに存在するため、比較は失敗し、出力hi
されます。
ここで関数のアドレスを比較しますが、関数が同じではないため、等式は成り立ちません。何があなたを混乱させているのかわかりません。
if ステートメントでprintf
orを呼び出していません。scanf
むしろ、異なるメモリ内のscanf
とprintf
関数の場所を比較しています (そうでなければ、同じコードを実行し、同じ機能を持っています)。
関数を呼び出した場合にのみ、戻り値が返されます。呼び出しは次のようになります<function_name> ( <arguments separated by commas> )
。
他の人がすでに述べたように、2 つの関数 (この場合は printf と scanf) のアドレスを比較しています。これらの関数は同じアドレスを持つことはできないため、比較は失敗し、プログラムは「hi」を出力します。
以下のコードを試して、理解を深めることができます
int main(void)
{
printf("printf = %x\n", printf);
printf("scanf = %x\n", scanf);
return 0;
}
関数のアドレスが関数printf
と同じではないためですscanf
。