基本的C ++字符串/指针问题。这个问题包含在最后的评论中 - 也就是为什么最后一行中的[0]不会产生'john'?
#include <iostream>
using namespace std;
void funk(char* a[]);
int main() {
char* z[5];
z[0] = "john";
z[1] = "susan";
z[2] = "holly";
z[3] = "simon";
z[4] = "lucinda";
funk(z);
cin.get();
return 0;
}
void funk(char* a[]) {
cout << a[0] << endl; // prints 'john'.
cout << *a << endl; // prints 'john'.
a++;
cout << *a << endl; // prints 'susan'.
a++;
cout << *a << endl; // prints 'holly'.
cout << a[0] << endl; // prints 'holly' again. But why?! Why doesn't it print 'john'?
}
答案 0 :(得分:1)
两次之后
a++;
a
指向两个要素。现在新的a[0]
实际上与之前的a[2]
相同,因此打印holly
。
答案 1 :(得分:1)
预计两者输出相同(“冬青”)。
a[i]
是*(a + i)
的简写,因此您的最后一行确实是*(a + 0)
或*a
,这是之前执行的代码。
答案 2 :(得分:1)
它不会打印"john"
,因为传递给函数的数组会衰减为指针,当你修改a
时(即当你执行a++
时)你会丢失原始指针
另请注意,a[x]
始终等同于*(a + x)
(如果*a
为零,则为x
)。这意味着a[0]
和*a
将始终为您提供相同的结果。