如果我用这样的东西声明一个数组:
const char var[]="Some message here";
然后有一个函数通过接受指向数组的指针来打印此消息,如下所示:
void printMessage(char *msg)
那么如果我这样调用这个函数有什么区别:
printMessage(var);
或这个:
printMessage(&var[0]);
哪个是调用这个函数的更合适的方法?
从技术上讲,没有区别——var
字面意思是&var[0]
使用哪一个是部分个人偏好、部分可读性和部分一致性。例如,如果您要在一个点调用该函数,var
然后在另一个点调用该函数,&var[n]
那么我会争辩&var[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.
对于类似的事情,我只是通过var
,但是当我在做指针算术时,我使用更长的形式&var[3]
而不是var + 3
因为我认为它更清楚地表明我正在做指针算术。
它们在 C 中是相同的。如果您有 C 数组或 C 指针,请使用较短的语法。
在 c++ 中处理向量时,我使用较长的语法,以明确发生了什么:
void f(const double * arry);
void g() {
std::vector<double> vec = //.....
f(&(vec[0]));
}