简单程序帮助 - 发送动态内存指针到函数
simple program help - sending dynamic memory pointer to function
好的,所以我的程序中出现了一个奇怪的问题,我不太明白发生了什么。问题是:
- 当我只使用示例 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]
就可以了。
顺便说一句:您应该为 main()
声明 return 类型,例如 int main() { ... }
.
BTW2:I 会建议您使用 std::vector
或 std::array
而不是原始数组,因为它是 C++。
好的,所以我的程序中出现了一个奇怪的问题,我不太明白发生了什么。问题是:
- 当我只使用示例 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]
就可以了。
顺便说一句:您应该为 main()
声明 return 类型,例如 int main() { ... }
.
BTW2:I 会建议您使用 std::vector
或 std::array
而不是原始数组,因为它是 C++。