同样,我偶然发现了一些我无法理解一些基本路线的练习,说我无法理解一些事情是如何起作用的。我确实知道指针,但有时在我看来,我仍然缺乏一些基本的知识。
在以下示例中使用指针有什么意义(在函数参数中并将字符串类型数据与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中需要指针作为函数参数,为什么我不能使用这些变量而不是指针?
提前感谢您的礼貌和任何易于理解的解释;)
干杯!
答案 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 ++中的指针传递。这是因为函数参数只是单个值,而数组和结构是多个值。
因此,由于指针是单个值,因此可以传递多个值不能的值。 指向那些结构或数组。
在机器代码级别上,这是因为函数调用约定只在寄存器或堆栈中有单个值的位置。