有点不懂你的意思:
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);
}
}
}
温馨提示:答案为网友推荐,仅供参考