为什么我可以在没有参考的情况下操作动态矩阵
Why I can manipulate dynamic matrix without reference
让它成为动态分配数组的创建函数:
void create(int *&a, int dim){
a=new int[dim];
for(int i=0;i<dim;i++){
a[i]=i+1;
}
这里,我需要参考(&
)。现在,我有一个动态分配矩阵的创建函数:
void create(int **&a,/* int**a, */ int lines,int rows){
...
}
我看到了动态分配矩阵创建函数的引用是可选的。为什么?
如果要分配"外部"数组行,则需要引用。没有它,您只能分配"内部"数组-行(如果已经分配了"外部"数组)。因此,在您的情况下,推荐信是强制性的。
void create(int **a, int lines, int rows)
{
a = new int*[lines]; // passed pointer to 'a' will point to an old address
for(int i = 0; i < lines; i++)
a[i] = new int[rows];
}
如果要修改传递到函数内部函数的指针,则需要通过引用传递。
所以不,在您的情况下,引用是而不是可选的。无论你在哪里看到它是可选的,都是错误的。
我的坏。对不起。我看到assignValues函数中的refreference是不必要的,所以我认为create函数也没有必要。谢谢大家的回复。再次,我很抱歉。这是我的代码:
#include <iostream>
#include <conio.h>
using namespace std;
void create(int **&a, int lines, int rows){
int i;
a = new int*[lines];
for (i = 0; i < lines; i++){
a[i] = new int[rows];
}
}
void assignValues(int **a, int lines, int rows){
int i,j,k = 1;
for (i = 0; i < lines; i++){
for (j = 0; j < rows; j++){
a[i][j] = k;
k++;
}
}
}
void print(int **a, int lines, int rows){
int i, j;
cout << "Matrix is: "<<endl;
for (i = 0; i < lines; i++){
for (j = 0; j < rows; j++){
printf("%3d",a[i][j]);
}
cout << endl;
}
}
int main()
{
int lines = 5;
int rows = 4;
int **a = 0;
create(a, lines, rows);
assignValues(a, lines, rows);
print(a, lines,rows);
_getch();
return 0;
}
相关文章:
- 如何在不复制的情况下操作 QByteArray 对象?
- 如何在没有外部库的情况下使用C++03约束执行基于正则表达式的字符串操作
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 在这种情况下,原子读取操作memory_order_seq_cst读取哪个值
- 是否有另一种方法可以在不使用宏定义的情况下进行此操作
- 为什么C++没有简洁的语法允许在不定义计数器的情况下多次执行操作?
- C++。可以在没有错误的情况下执行此操作:"未在此范围内声明"
- 在不使用缓冲区的情况下对2个图像进行操作(加法、减法等)
- 如何在不进行内存操作的情况下在 C++ 和 STL 中定义 2D 数组
- 如何在没有条件变量的情况下阻止线程中的操作,并在Linux中根据信号恢复操作
- 是否可以在不使用任何头文件的情况下在C++中执行I/O操作
- 为什么我可以在没有参考的情况下操作动态矩阵
- 在这些情况下,C++编译器对隐式类型转换执行哪些操作
- 如果一个basic_waitable_timer在仍有异步操作等待的情况下被销毁,该怎么办
- 如何在不陷入无效输入的情况下重复此操作
- c++boost::任何在不知道类型的情况下使用该值的操作
- 我们可以在不使用 c++ 中的任何库的情况下加载、显示和操作图像的矩阵吗?
- 是否存在一个c++函数(内置或其他),可以在不重复操作的情况下给出整数除法和模除法的结果
- 如何在不混淆的情况下监视.NET web浏览器控件上的用户操作
- 如何在不使用信号插槽连接的情况下触发操作