我在使用“ new”和引用进行动态分配时遇到了一些麻烦。请在下面查看一个简单的代码。
#include<iostream>
using namespace std;
void allocer(int *pt, int *pt2);
int main()
{
int num = 3;
int num2 = 7;
int *pt=#
int *pt2 = &num2;
allocer(pt, pt2);
cout << "1. *pt= " << *pt << " *pt2= " << *pt2 << endl;
cout << "2. pt[0]= " << pt[0] << " pt[1]= " << pt[1] << endl;
}
void allocer(int *pt, int *pt2)
{
int temp;
temp = *pt;
pt = new int[2];
pt[0] = *pt2;
pt[1] = temp;
cout << "3. pt[0]= " << pt[0] << " pt[1]= " << pt[1] << endl;
}
我想要做的是使函数“ allocer”获得2个参数,它们是int指针,并在其中一个上分配内存。如您所见,* pt变成一个由2个整数组成的数组。在该函数内部,它运作良好,这意味着我标记为3.的句子按我的意图打印。但是,1,2不起作用。 1打印原始数据(* pt = 3,* pt2 = 7),2打印错误(* pt = 3,* pt2 = -81203841)。 如何解决?
答案 0 :(得分:1)
您正在按值传递pt
和pt2
变量,因此allocer
分配给它们的任何新值仅保留在allocer
本地,而不会反映到main
。
要执行您要尝试的操作,需要通过引用(pt
)或指针(int* &pt
)传递int** pt
,以便allocer
可以在main
被引用。
此外,根本没有充分的理由将pt2
用作指针,因为allocer
并不将其用作指针,它仅引用pt2
来获取实际值。 int
,因此您应该按值传递实际的int
。
尝试更多类似的方法:
#include <iostream>
using namespace std;
void allocer(int* &pt, int i2);
int main()
{
int num = 3;
int num2 = 7;
int *pt = #
int *pt2 = &num2;
allocer(pt, *pt2);
cout << "1. *pt= " << *pt << " *pt2= " << *pt2 << endl;
cout << "2. pt[0]= " << pt[0] << " pt[1]= " << pt[1] << endl;
delete[] pt;
return 0;
}
void allocer(int* &pt, int i2)
{
int temp = *pt;
pt = new int[2];
pt[0] = i2;
pt[1] = temp;
cout << "3. pt[0]= " << pt[0] << " pt[1]= " << pt[1] << endl;
}
或
#include <iostream>
using namespace std;
void allocer(int** pt, int i2);
int main()
{
int num = 3;
int num2 = 7;
int *pt = #
int *pt2 = &num2;
allocer(&pt, *pt2);
cout << "1. *pt= " << *pt << " *pt2= " << *pt2 << endl;
cout << "2. pt[0]= " << pt[0] << " pt[1]= " << pt[1] << endl;
delete[] pt;
return 0;
}
void allocer(int** pt, int i2)
{
int temp = **pt;
*pt = new int[2];
(*pt)[0] = i2;
(*pt)[1] = temp;
cout << "3. pt[0]= " << (*pt)[0] << " pt[1]= " << (*pt)[1] << endl;
}
答案 1 :(得分:0)
您刚才所做的是动态分配了函数内部的pt。并且此函数变量pt是局部变量,与主函数中的pt不同。 您可以做的是,如果您要动态地为该指针分配内存,则可以传递指针本身的地址。