如果我用这样的东西声明一个数组:
const char var[]="Some message here";
然后有一个函数通过接受指向数组的指针来打印此消息,如下所示:
void printMessage(char *msg)
如果我这样调用这个函数有什么区别:
printMessage(var);
或者这个:
printMessage(&var[0]);
哪种调用此函数更合适?
答案 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
,因为我认为它会成功更清楚我正在做指针算术。