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

simple program help - sending dynamic memory pointer to function

本文关键字:内存 指针 函数 动态 程序 帮助 -发 简单      更新时间:2023-10-16

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

  • 当我只使用示例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);
}

operator[]的优先级高于operator*,因此*a[i]*(a[i])相同。注意,a是指向单个 int*的指针,因此*(a[1])(与a[1]不同)将指向UB。

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


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