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

C++ 简单程序帮助-向函数发送动态内存指针,c++,arrays,pointers,operator-precedence,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[

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

  • 当我只使用示例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);
}
#包括
使用名称空间std;
整数显示(整数**a,整数*n){
int i;

对于(i=0;i
运算符[]
的优先级高于
运算符*
,因此
*a[i]
*(a[i])
相同。请注意
a
是指向单个
int*
的指针,因此
*(a[1])
(尊重
a[1]
)将导致UB

您可以使用括号指定所需的优先级,将其更改为
(*a)[i]
,这样它就可以正常工作


BTW1:您应该为
main()
声明返回类型,比如
intmain(){…}


BTW2:我建议您使用“代码< >代码:>代码> STD::数组< /代码>,而不是原始数组,因为它是C++ + ./p>第一,您需要在int之前先输入int,这里是解释,A是指向3 int数组的第一个元素的指针。然后,需要在第一个例子中通过第一个元素来获得指针到第一个元素,你可以取消一些不是你的,不确定的行为,也就是说,如果这是C++,你的函数不是测试<代码> A/EXECUT>不是空,也许是引用需要什么?@ ToBySwitt我不确定OP的意图,我同意这里的指针不太有意义。事实上,对于C++来说,最优选的方式是Sou.ld be
int show(const std::vector&a)