C++ 定义 一个指向 两个字符串的指针

有 chat a, b, 如何用new 定义一个 指向 a 和b 的指针p,然后通过p访问a和b
我的意思是这样:
我在一个函数里面要传进两个字符串,但是我只想传进一个指针,通过这个指针访问这两个字符串。 我是这样想的,定义一个指针指向一个数组,数组里面存放两个指针,这两个指针又分别指向a,b. 但我不会定义

有点不懂你的意思:
1. 你说是指向字符串的指针,可是你定义的是两个字符 char a,b; 你要是用字符串,可以用字符数组 char ch[33];的形式或者是string str;
2.一个指针怎么可以指向两个字符串呢?只可以是两个指针同时指向一个对象(内存空间),你要指向两个字符串就必须定义两个指针
string s1,s2; //定义两个字符串
string *p1,*p2; p1=&s1; p2=&s2;
如果你想要用指针对所指字符串操作可以: *p1="hello!"; *p2="world";
3.你说到new 那个没必要,你是指向其他对象,而不是需要分配内存空间。定义
一个指针时就分配了一个存储地址大小的空间,属于栈空间。动态分配内存是在堆
空间中分配一块内存。如: char* p=new char[22]; //意思就是分配一个22个char字符大小
的内存块(在对空间中),然后在栈空间中定义一个指针变量p,p中所存的值就是动态分配
的堆内存首地址。

晕,你要说清楚点:
你的意思是不是定义一个指针数组啊。
可以用:
char ch1[22]="fdas";
char ch2[12]="gadf";
char* p[2]={ch1,ch2}; //定义一个指针数组(本质是个数组,只是数组每个值存储的是指向字符串的地址)
cout<<p[0]<<" "<<p[1]; //对所指字符串用指针输出

下面贴段代码给你参考
void swa(string* p,int n);
int main()
{
string str[4]={"a","c","b","d"};
string* p=str;
swa(str,4);
for(int i=0;i<4;i++) cout<<p[i]<<endl;
return 0;
}
void swa(string* p,int n) //用c++里的string数组是最好的,函数这儿没什么实际意义,仅供参考
{
string temp;
for(int i=0;i<n-1;i++)
{
if(p[i] < p[i+1])
{ temp=p[i]; p[i]=p[i+1]; p[i+1]=temp; }
}
}
*/
void swa(char (*p)[22],int n);
int main()
{
char ch[4][22]={"asd","d4a","ba","cagsd"};
for(int i=0;i<4;i++) cout<<*(ch+i)<<endl;
swa(ch,4);
return 0;
}
void swa(char (*p)[22],int n) //采用二维数组,用指针数组不好解决,因为不知道每个字符串大小
{
char temp[22];
for(int i=0;i<n-1;i++)
{
if(strcmp(*p,*(p+1))<0)
{
strcpy(temp,*p); strcpy(*p,*(p+1)); strcpy(*(p+1),temp);
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-26
这个不用new也可以。但要同时访问a和b不可能,除非你定义一个结构,包含2个指针,然后一个指向a,一个指向b。
char *p;
p=&a;
p=&b;
就可以了。
也许我没理解你的问题,但C++应该支持这样的C定义。
第2个回答  2011-03-05
,但是仍然是属于传值调用的范畴。因为指针只是用来赋值,并没有被间接引用。
那么你是不是想用传址调用呢,就这个程序而言,也是不行的。你希望通过交换str1和str2的值来实现字符串的赋值,是行不通的。因为,在C++中,任何一个数组的名,都是一个指针,相信这个你也知道,但是,以str1为例来说明,它的类型是const char *,也就是一个指针常量,给str1赋值就是给一个常量赋值,非法!
如果想达到目的,可以借助第三个数组,使用strcpy(或者strncpy)来实现。
如下 :
void swap(char *p1,char *p2)
{ char pt[20];
strcpy(pt,p1);
strcpy(p2,pt);
strcpy(p1,p2);
}
有问题的话我们可以再交流。。。
第3个回答  2011-02-26
楼上所说的不错,符合楼主的思想,但是却无法得到正确的结果,因为定义的是(char *)p[2]={ch1,ch2};
也就是说p[0]的值是ch1的地址,那么*p[0](p[0]等价于p,p[1]等价于p+1)就是一个char型数据了,因此最后一句要去掉* :
char ch1[22]="fdas";
char ch2[12]="gadf";
char* p[2]={ch1,ch2}; //定义一个指针数组(本质是个数组,只是数组每个值存储的是指向字符串的地址)
cout<<p[0]<<" "<<p[1]; //对所指字符串用指针输出本回答被提问者采纳
第4个回答  2011-02-26
char a = ‘x’,b = 'y';
char *p = new char;
p = &a; //p指向a,
cout<<*p<<endl;//输出a的值
p = &b; //指向b;
cout<<*p<<endl;//输出b的值
p = NULL;
delete p; //删除指针;