简单程序帮助 - 发送动态内存指针到函数

simple program help - sending dynamic memory pointer to function

好的,所以我的程序中出现了一个奇怪的问题,我不太明白发生了什么。问题是:

你能给我解释一下为什么我不能使用第一个例子吗?

#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);
}

operator[]的优先级高于operator*,所以*a[i]等同于*(a[i])。请注意,a 是指向 单个 int* 的指针,因此 *(a[1])(对 a[1] 的尊重)将导致 UB。

你可以用括号来指定你想要的优先级,把它改成(*a)[i]就可以了。


顺便说一句:您应该为 main() 声明 return 类型,例如 int main() { ... }.
BTW2:I 会建议您使用 std::vectorstd::array 而不是原始数组,因为它是 C++。