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

时间:2016-10-14 07:01:20

标签: c++ arrays pointers operator-precedence

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

  • 当我仅使用示例1时,我的程序崩溃
  • 当我使用例2时,它可以正常工作

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

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

1 个答案:

答案 0 :(得分:4)

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

您可以使用括号指定您想要的优先级,将其更改为(*a)[i]然后它会正常工作。

BTW1:您应该声明main()的返回类型,例如int main() { ... }
BTW2:我建议您使用std::vectorstd::array代替原始数组,因为它是C ++。