2014-10-17 126 views
0

再一次,我偶然發現了一些練習,我無法理解一些基本的線條,也就是說我無法真正理解某些事情是如何工作的。我知道指針,但有時在我看來,我仍然缺乏一些基本的知識。指針作爲函數參數

以下示例中使用指針的要點是什麼(在函數參數中,並將字符串類型數據與char類型數據進行比較,因爲它在名爲InsertPerson的函數中指出)。

讓我這樣說吧,我們已經得到了下面的代碼:

struct SPerson 
{ 
    string name; 
    string surname; 
    int age; 
}; 

priority_queue<SPerson, vector<SPerson>, FunkyFunctor> SuperPQ; 

// ** THIS IS THE BIT OF CODE WHICH I'M HAVING PROBLEM WITH 

void InsertPerson(SuperPQ &kp, const char *name, const char *surname, int age) 
{ 
    SPerson newPerson; 
    newPerson.name = name; 
    newPerson.surname = surname; 
    newPerson.age = age; 

    kp.push(newPerson); 
} 

int main(void) 
{ 
    SuperPQ superQUEUE; 


    InsertPerson(superQUEUE, "Jeremy", "Clarkson", 54); 

} 

爲什麼需要指針作爲函數的參數叫做InsertPerson功能,爲什麼我不能使用這些變量,而不是自己的指針?

預先感謝您的禮貌和任何容易理解的解釋;)

乾杯!

+4

你可以使用'const std :: string&name,const std :: string&surname' – Creris 2014-10-17 22:22:11

回答

2

字符串文字,即"hello"的類型爲「數組n const char」(§2.14.5/8)。在某些情況下,數組被稱爲decay以指向它們的第一個元素。因此,const char不適合採用期望字符串文字的參數。正如@Creris所述,由於您的數據成員是std::string,因此您不必使用const char*,而是可以用const std::string&替代它們。

0

數組必須通過C和C++中的指針傳遞。這是因爲函數參數只有單個值,數組和結構是多個值。

因此,由於指針是一個單一的值,它可以通過多個值不能。它到那些結構或數組。

在機器代碼級上,這是因爲函數調用約定在寄存器或堆棧中只有單個值的位置。