将数组传递给函数的正确语法

时间:2013-04-25 17:58:52

标签: c arrays syntax

如果我用这样的东西声明一个数组:

const char var[]="Some message here";

然后有一个函数通过接受指向数组的指针来打印此消息,如下所示:

void printMessage(char *msg)

如果我这样调用这个函数有什么区别:

printMessage(var);

或者这个:

printMessage(&var[0]);

哪种调用此函数更合适?

4 个答案:

答案 0 :(得分:3)

从技术上讲,没有区别 - var&var[0]

的字面等价物

使用哪一部分是个人偏好,部分可读性和部分一致性。例如,如果您要在var的某一点和&var[n]的另一个点调用该函数,那么我会主张在第一次调用中使用&var[0]作为可读性助剂。

答案 1 :(得分:0)

var&var[0]都等于char数组中第一个成员的地址。

前者对阵列来说最简单。

后者可用于将std :: vector传递给接受数组地址的函数。

答案 2 :(得分:0)

它们在C中是相同的。如果您有C数组或C指针,请使用较短的语法。

我在处理c ++中的向量时使用了更长的语法,以清楚地说明发生了什么:

void f(const double * arry);
void g() {
    std::vector<double> vec = //.....
    f(&(vec[0]));
}

答案 3 :(得分:0)

对于类似的东西,我只是传递var,但是当我在做指针算术时,我使用较长形式的&var[3]而不是var + 3,因为我认为它会成功更清楚我正在做指针算术。