0

次のコードを検討してください。

char strName[25]; 
void SetInfo(char *strName) 
{ 
strncpy(m_strName, strName, 25); 
} 

関数パラメーターでポインターを使用しているのはなぜですか? これを行うことはできません:

void SetInfo(char strName[]) {
strncpy(m_strName, strName, 25); }

? 両者の違いは何ですか?

ありがとうございました

4

2 に答える 2

1

この特定のケースでは、まったくありません (もう 1 文字入力する以外は)。char 配列は、関数に渡されるとポインターに「減衰」します。

于 2013-03-05T01:18:13.510 に答える
-1

配列は、パラメーターとして渡すときに常にポインターとして減衰します。

この場合、配列はポインターのようなものです (配列の最初の要素のメモリを指します)

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

これが標準かどうかはわかりません。

于 2013-03-05T01:29:26.800 に答える