2014-10-17 128 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++中的指针传递。这是因为函数参数只有单个值,数组和结构是多个值。

因此,由于指针是一个单一的值,它可以通过多个值不能。它到那些结构或数组。

在机器代码级上,这是因为函数调用约定在寄存器或堆栈中只有单个值的位置。