1

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

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

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

void printMessage(char *msg)

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

printMessage(var);

或这个:

printMessage(&var[0]);

哪个是调用这个函数的更合适的方法?

4

4 回答 4

3

从技术上讲,没有区别——var字面意思是&var[0]

使用哪一个是部分个人偏好、部分可读性和部分一致性。例如,如果您要在一个点调用该函数,var然后在另一个点调用该函数,&var[n]那么我会争辩&var[0]在第一次调用中使用它作为可读性帮助。

于 2013-04-25T18:01:20.623 回答
0

Both var and &var[0] equal the address of the first member in the char array.

The former is simplest for arrays.

The latter can be useful for passing a std::vector to a function that accepts an array address.

于 2013-04-25T18:02:05.493 回答
0

对于类似的事情,我只是通过var,但是当我在做指针算术时,我使用更长的形式&var[3]而不是var + 3因为我认为它更清楚地表明我正在做指针算术。

于 2013-04-25T19:42:07.903 回答
0

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

在 c++ 中处理向量时,我使用较长的语法,以明确发生了什么:

void f(const double * arry);
void g() {
    std::vector<double> vec = //.....
    f(&(vec[0]));
}
于 2013-04-25T18:03:45.203 回答