好的,所以我的程序中有一个奇怪的问题,我真的不明白发生了什么。问题是:
你能解释一下为什么我不能使用第一个例子吗?
#include <iostream>
using namespace std;
int show(int **a, int *n){
int i;
for(i=0; i<*n; i++){
cout << "number is: " << *a[i] << endl; // EXAMPLE 1
cout << "number is: " << *(*a+i) << endl; // EXAMPLE 2
}
}
main() {
int n = 3, i;
int *a = new int[n];
for(i=0; i<3; i++){
cout << "number: ";
cin >> a[i];
}
show(&a, &n);
}
答案 0 :(得分:4)
operator[]
的优先级高于operator*
,因此*a[i]
与*(a[i])
相同。请注意,a
是指向单 int*
的指针,因此*(a[1])
(对a[1]
的尊重)将导致UB。
您可以使用括号指定您想要的优先级,将其更改为(*a)[i]
然后它会正常工作。
BTW1:您应该声明main()
的返回类型,例如int main() { ... }
。
BTW2:我建议您使用std::vector
或std::array
代替原始数组,因为它是C ++。