马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
已经知道:当我们把一个指针做为参数传一个函数时,其实是把指针的复本传递给了函数,也可以说传递指针是指针的值传递。所以我才用指针的引用方式来解决这个问题。最开始使用的测试程序如下【这个程序和自己预测的一样,可以改变】#include <iostream>
using namespace std;
void change(char *&q)
{
q = "qwer";
}
int main()
{
char *p = "abcd";
cout << "原始的:";
while((*p) != '\0')
{
cout << *p;
p++;
}
change(p);
cout << "改变的:";
while((*p) != '\0')
{
cout << *p;
p++;
}
}
但是下面这个程序确和预测的不一样,没法改变了,不知道问题到底出现在哪里,还请大佬们帮忙解决问题,多谢多谢!!!#include <iostream>
using namespace std;
#include <string.h>
//将string类型转化为char*类型
bool string_char(string str, char *&p)
{
int len = str.length();
p = new char[len*2];//开辟足够大的内存存储
int n = str.copy(p, len, 0);
p[len] = '\0';
cout << "\n过程中的";
while((*p) != '\0')
{
cout << *p;
p++;
}
if(n == len)
return true;
return false;
}
int main()
{
string str = "aaaaaaa";
char *q = "afggt";
cout << "原始的";
while((*q) != '\0')
{
cout << *q;
q++;
}
string_char(str, q);
cout << "\n改变后的";
while((*q) != '\0')
{
cout << *q;
q++;
}
return 0;
}
-----------------------------------------------------------
运行结果为:
原始的afggt
过程中的aaaaaaa
改变后的
函数中如下代码输出时p指针自增,已经不再指向首字符了,才导致main输出不对:
cout << "\n过程中的";
while((*p) != '\0')
{
cout << *p;
p++;
}
用一个临时指针变量,不改变p,测试结果正常:
cout << "\n过程中的";
char *tmp=p;
while((*tmp) != '\0')
{
cout << *tmp;
tmp++;
}
|