C ++ - 指针函数参数

时间:2011-01-23 10:26:48

标签: c++ arrays pointers

我在这里问了一个问题:C++ - class issue

我还没有得到的是指针参数:

void setInfo(char *strName,int id,double wage)

通过以下方式调用:

abder.setInfo("Abder-Rahman",123,400);

我知道数组的名称是指针。但是,为什么我们必须有一个指针数据类型?我们不能在函数参数列表中使用char[]吗?我认为当我尝试时出现错误。

感谢。

4 个答案:

答案 0 :(得分:3)

  

但是,为什么我们必须有一个指针数据类型?

因为在编译函数时需要知道函数参数的大小。即该函数需要知道内存中参数列表的距离,以便找到idwage

  

我们不能在函数参数列表中使用char []吗?

是的,你可以,但仍然通过指针传递。数据作为数组的一部分的其他属性(例如sizeof()返回数组的总大小)都不会保留在被调用函数内。在函数签名中使用[]的能力只是指示您传递的项应该是某种类型的数组(而不是指向结构的指针)。

答案 1 :(得分:2)

供参考,来自C ++ 03标准,§ 8.3.5 3:

  

在确定每个参数的类型后,任何类型为“T of T”或“函数返回T”的参数都将被调整为“指向T的指针”或“指向函数返回T的指针”。

此外,使用[]声明的数组是不完整的对象类型(§ 8.3.4 1),但这在声明函数参数时不会导致问题,因为它将转换为指针。

答案 2 :(得分:1)

char []也是一个指针。是的,你可以使用它。

答案 3 :(得分:1)

数组和指针非常相关 - 你甚至可以使用像数组一样的指针,比如

void foo(char *ptr) {
    ptr[2] = 'x';
}

在你的情况下,你得到一个编译错误(或警告),因为字符串文字(如"foo")被认为是const,即它们可能不会被修改,并且因为一个函数没有采用const指针不承诺不改变它,编译器拒绝将其作为字符串文字。

你需要做

void setInfo(const char *strName,int id,double wage)

通常,除非您计划修改对象,否则应始终使用const作为指针和引用参数。