指针作为函数参数

时间:2014-10-17 22:21:16

标签: c++ pointers

同样,我偶然发现了一些我无法理解一些基本路线的练习,说我无法理解一些事情是如何起作用的。我确实知道指针,但有时在我看来,我仍然缺乏一些基本的知识。

在以下示例中使用指针有什么意义(在函数参数中并将字符串类型数据与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中需要指针作为函数参数,为什么我不能使用这些变量而不是指针?

提前感谢您的礼貌和任何易于理解的解释;)

干杯!

2 个答案:

答案 0 :(得分:2)

字符串文字,即"hello"的类型为“ n const char”的数组(第2.14.5 / 8节)。在某些情况下,数组被称为decay指向其第一个元素的指针。因此,const char不适合采用需要字符串文字的参数。正如@Creris所提到的,因为您的数据成员是std::string,所以您不必使用const char*,而是可以将其替换为const std::string&

答案 1 :(得分:0)

数组必须通过C和C ++中的指针传递。这是因为函数参数只是单个值,而数组和结构是多个值。

因此,由于指针是单个值,因此可以传递多个值不能的值。 指向那些结构或数组。

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