次のコードを検討してください。
char strName[25];
void SetInfo(char *strName)
{
strncpy(m_strName, strName, 25);
}
関数パラメーターでポインターを使用しているのはなぜですか? これを行うことはできません:
void SetInfo(char strName[]) {
strncpy(m_strName, strName, 25); }
? 両者の違いは何ですか?
ありがとうございました
次のコードを検討してください。
char strName[25];
void SetInfo(char *strName)
{
strncpy(m_strName, strName, 25);
}
関数パラメーターでポインターを使用しているのはなぜですか? これを行うことはできません:
void SetInfo(char strName[]) {
strncpy(m_strName, strName, 25); }
? 両者の違いは何ですか?
ありがとうございました
この特定のケースでは、まったくありません (もう 1 文字入力する以外は)。char 配列は、関数に渡されるとポインターに「減衰」します。
配列は、パラメーターとして渡すときに常にポインターとして減衰します。
この場合、配列はポインターのようなものです (配列の最初の要素のメモリを指します)
void foo(char a[])
{
a[0] = '@';
cout << a[0];
cout << *a;
}
cout への両方の呼び出しは、同じ文字 '@' を出力します。
void foo(char a[])
{
// gives you the size of a pointer to the array's data type.
// prints 4
sizeof(a);
// prints char *
cout << typeid(a).name();
}
これが標準かどうかはわかりません。