2013-03-05 2 views
0

Рассмотрим этот кусок кода:Pointer в параметрах функции C++

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

Почему они используют указатель в параметре функции? Разве мы не можем это сделать:

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

? В чем разница между ними?

Спасибо

+2

Они идентичны. – chris

ответ

1

В данном случае, ни на все (кроме еще одного письма не вводить). Массив char «распадается» на указатель при передаче функции.

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

Я не уверен, что это стандарт.

+0

Массивы не указатели. Они распадаются, когда они передаются в функцию без ссылки, между прочим. Различие является важным. – chris

+0

@chris: Не могли бы вы объяснить такие случаи? Благодарю. (Я сказал в целом) – agarwaen

+1

Ну, например, распад не происходит, если массив передается в 'sizeof'. Причина, по которой я сказал что-то, состояла в том, что у многих людей есть неправильные представления о том, что массив является указателем, и это совершенно неправильно и просто служит для их смущения, когда поведение, которое они ожидают от указателя, не происходит с массивом. – chris