2013-03-05 101 views
0

考慮這一段代碼:指針在功能參數C++

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

他們爲什麼使用指針中的函數參數?我們不能這樣做:

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

?兩者有什麼區別?

謝謝

+2

它們是相同的。 – chris 2013-03-05 01:17:36

回答

1

在這種特殊情況下,根本就沒有(除了多了一個字母輸入)。傳遞給函數時,char數組「衰減」爲指針。

-1

當作爲參數傳遞時,數組總是衰減爲指針。

在這種情況下數組類似於一個指針(它們指向的數組的第一個元件的存儲器)

void foo(char a[]) 
{ 
    a[0] = '@'; 
    cout << a[0]; 
    cout << *a; 
} 

兩種呼叫來清點打印相同的字符「@」。

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 2013-03-05 01:31:01

+0

@chris:你能解釋這種情況嗎?謝謝。 (我通常說過) – agarwaen 2013-03-05 01:36:43

+1

好吧,例如,如果數組傳遞給'sizeof',衰減不會發生。我之所以說什麼是因爲很多人有錯誤的觀念認爲數組是一個指針,而這完全是錯誤的,只是當他們期望從一個指針發出的行爲不會發生在數組中時,它們就會混淆它們。 – chris 2013-03-05 01:42:56