C++ 一维动态数组作函数参数问题

Homio 2017-09-08 05:40:16
我在主函数定义了一维动态数组,现在想调用函数,并将动态数组传给函数。现在函数成功传递参数,在函数里也改变了动态数组中的值。但是出了函数动态数组中的值并未改变。下面是我的定义:

函数调用:
int AddNum, SubNum;
AddNum = a.Replace(_T("+"),_T("+"));
SubNum = a.Replace(_T("-"),_T("-"));
int *Pos = new int[AddNum + SubNum];
CString *StrPart = new CString[AddNum + SubNum + 1];
Get(a, &AddNum, &SubNum, Pos, StrPart);

函数声明:
void Get(CString a, int *AddNum, int *SubNum, int Pos[], CString StrPart[]);

函数定义:
void Get(CString a, int *AddNum, int *SubNum, int Pos[], CString StrPart[])
{
int flag = 0;
// int AddNum, SubNum;
*AddNum = a.Replace(_T("+"),_T("+"));
*SubNum = a.Replace(_T("-"),_T("-"));
// int AddPos[10];
// int SubPos[10];
int *AddPos = new int[*AddNum];
int *SubPos = new int[*SubNum];

int j = 0;
for(int i=0; i<*AddNum; i++)
{
AddPos[j] = a.Find ('+',flag);
flag = AddPos[j];
flag += 1;
j++;
}
j = 0;
flag = 0;
for(int i=0; i<*SubNum; i++)
{
SubPos[j] = a.Find ('-',flag);
flag = SubPos[j];
flag += 1;
j++;
}
// int Pos[20];
Pos = new int[*AddNum + *SubNum];

for(int i=0; i<*AddNum; i++)
{
Pos[i] = AddPos[i];
}
j=0;
for(int i=*AddNum; i<*AddNum + *SubNum; i++)
{
Pos[i] = SubPos[j];
j++;
}
for(j=0;j<*AddNum + *SubNum;j++)
{
for(int i=0;i<*AddNum + *SubNum-1-j;i++)
{
if(Pos[i]>Pos[i+1]) /* 由小到大,由大到小时改为< */
{
int t = Pos[i];
Pos[i] = Pos[i+1];
Pos[i+1] = t;
}
}
}
StrPart = new CString[*AddNum + *SubNum + 1];
if(Pos[0] == 0)
{
int i;
for(i=0;i<*AddNum + *SubNum-1;i++)
{
StrPart[i] = a.Mid(Pos[i]+1,Pos[i+1]-Pos[i]-1);
}
StrPart[i] = a.Right(a.GetLength() - Pos[i] - 1);
}
else
{
int i;
StrPart[0] = a.Left(Pos[0]);
for(i=0;i<*AddNum + *SubNum-1;i++)
{
StrPart[i+1] = a.Mid(Pos[i]+1,Pos[i+1]-Pos[i]-1);
}
StrPart[i+1] = a.Right(a.GetLength() - Pos[i] - 1);
}

}

比方说在主函数里Pos[1]=5,我想要在调用函数过后让Pos[1]=2,现在在函数体里能改变,出了函数体就还是原样。请告诉我怎么传递参数。
...全文
364 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Homio 2017-09-08
  • 打赏
  • 举报
回复
void Get(CString a, int *AddNum, int *SubNum, int Pos[], CString StrPart[])
{
	int flag = 0;
//	int AddNum, SubNum;
	*AddNum = a.Replace(_T("+"),_T("+"));
	*SubNum = a.Replace(_T("-"),_T("-"));
//	int AddPos[10];
//	int SubPos[10];
	int *AddPos = new int[*AddNum];
	int *SubPos = new int[*SubNum];	

	int j = 0;
	for(int i=0; i<*AddNum; i++)
	{		
		AddPos[j] = a.Find ('+',flag);
		flag = AddPos[j];
		flag += 1;
		j++;
	}
	j = 0;
	flag = 0;
	for(int i=0; i<*SubNum; i++)
	{		
		SubPos[j] = a.Find ('-',flag);
		flag = SubPos[j];
		flag += 1;
		j++;
	}
//	int Pos[20];
	Pos = new int[*AddNum + *SubNum];
		
	for(int i=0; i<*AddNum; i++)
	{
		Pos[i] = AddPos[i];
	}
	j=0;
	for(int i=*AddNum; i<*AddNum + *SubNum; i++)
	{
		Pos[i] = SubPos[j];
		j++;
	}
	for(j=0;j<*AddNum + *SubNum;j++)
	{
		for(int i=0;i<*AddNum + *SubNum-1-j;i++)
		{
			if(Pos[i]>Pos[i+1]) /* 由小到大,由大到小时改为< */
			{
				int t = Pos[i];
				Pos[i] = Pos[i+1];
				Pos[i+1] = t;
			}
		}
	}
	StrPart = new CString[*AddNum + *SubNum + 1];
	if(Pos[0] == 0)
	{
		int i;		
		for(i=0;i<*AddNum + *SubNum-1;i++)
		{
			StrPart[i] = a.Mid(Pos[i]+1,Pos[i+1]-Pos[i]-1);
		}		
		StrPart[i] = a.Right(a.GetLength() - Pos[i] - 1);
	}
	else
	{
		int i;
		StrPart[0] = a.Left(Pos[0]);
		for(i=0;i<*AddNum + *SubNum-1;i++)
		{
			StrPart[i+1] = a.Mid(Pos[i]+1,Pos[i+1]-Pos[i]-1);
		}
		StrPart[i+1] = a.Right(a.GetLength() - Pos[i] - 1);
	}

}
Homio 2017-09-08
  • 打赏
  • 举报
回复
抱歉,第一次发帖,不会用贴代码
函数调用:
int AddNum, SubNum;	
AddNum = a.Replace(_T("+"),_T("+"));
SubNum = a.Replace(_T("-"),_T("-"));
int *Pos = new int[AddNum + SubNum];
CString *StrPart = new CString[AddNum + SubNum + 1];
Get(a, &AddNum, &SubNum, Pos, StrPart);
函数声明:
void Get(CString a, int *AddNum, int *SubNum, int Pos[], CString StrPart[]);
函数定义:
void Get(CString a, int *AddNum, int *SubNum, int Pos[], CString StrPart[])
{
int flag = 0;
//	int AddNum, SubNum;
*AddNum = a.Replace(_T("+"),_T("+"));
*SubNum = a.Replace(_T("-"),_T("-"));
//	int AddPos[10];
//	int SubPos[10];
int *AddPos = new int[*AddNum];
int *SubPos = new int[*SubNum];	

int j = 0;
for(int i=0; i<*AddNum; i++)
{	
AddPos[j] = a.Find ('+',flag);
flag = AddPos[j];
flag += 1;
j++;
}
j = 0;
flag = 0;
for(int i=0; i<*SubNum; i++)
{	
SubPos[j] = a.Find ('-',flag);
flag = SubPos[j];
flag += 1;
j++;
}
//	int Pos[20];
Pos = new int[*AddNum + *SubNum];

for(int i=0; i<*AddNum; i++)
{
Pos[i] = AddPos[i];
}
j=0;
for(int i=*AddNum; i<*AddNum + *SubNum; i++)
{
Pos[i] = SubPos[j];
j++;
}
for(j=0;j<*AddNum + *SubNum;j++)
{
for(int i=0;i<*AddNum + *SubNum-1-j;i++)
{
if(Pos[i]>Pos[i+1]) /* 由小到大,由大到小时改为< */
{
int t = Pos[i];
Pos[i] = Pos[i+1];
Pos[i+1] = t;
}
}
}
StrPart = new CString[*AddNum + *SubNum + 1];
if(Pos[0] == 0)
{
int i;	
for(i=0;i<*AddNum + *SubNum-1;i++)
{
StrPart[i] = a.Mid(Pos[i]+1,Pos[i+1]-Pos[i]-1);
}	
StrPart[i] = a.Right(a.GetLength() - Pos[i] - 1);
}
else
{
int i;
StrPart[0] = a.Left(Pos[0]);
for(i=0;i<*AddNum + *SubNum-1;i++)
{
StrPart[i+1] = a.Mid(Pos[i]+1,Pos[i+1]-Pos[i]-1);
}
StrPart[i+1] = a.Right(a.GetLength() - Pos[i] - 1);
}

}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧