问题描述
- C++ 用指向指针的指针的方法对5个字符串排序并输出时遇到的问题
-
//用指向指针的指针的方法对5个字符串排序并输出
void sort(char **p)
{
char* temp=new char;//为什么没有长度呢?这么可以没有长度呢??
for(int j=0;j<5;j++)
{
for(int k=j;k<5;k++)
{if(strcmp(p[j],p[k])>0)
{
temp=p[j];
p[j]=p[k];
p[k]=temp;
}
}
}
}
int main()
{
char** p=new char*;//问题同上
for(int i=0;i
{
p[i]=new char;//问题同上
cin>>p[i];
}
sort(p);
for(int i=0;i<5;i++)
{
cout<<p[i]<<" ";
}
return 0;
}ps:是不是用指向指针的指针的方法做使问题简化了,更易操作了?为什么我看的有点晕···
解决方案
sort里面的不带长度是因为形参p是二级指针,输入性质,即内存在主函数已经分配。那么P[i]就是char*了。
在sort里面交换的不是内存块,而是指针的指向,所以只要给temp分配一个char字节就足够啦。
再说主函数里面的char**p,他也是一个指针,只不过指向的是一个指针而已,它初始指向一个char*,P[I]就是一级指针,它的内存分配如上面所述
总之一句话,指针的指向就是一个地址,你可以给他分配一串连续的地址,也可以是一串分散的地址,这里就是将数据分散存储了。
你完全可以自己重新写成分配一串连续的地址。
纯属个人见解
解决方案二:
sort里面的不带长度是因为形参p是二级指针,输入性质,即内存在主函数已经分配。那么P[i]就是char*了。
在sort里面交换的不是内存块,而是指针的指向,所以只要给temp分配一个char字节就足够啦。
再说主函数里面的char**p,他也是一个指针,只不过指向的是一个指针而已,它初始指向一个char*,P[I]就是一级指针,它的内存分配如上面所述
总之一句话,指针的指向就是一个地址,你可以给他分配一串连续的地址,也可以是一串分散的地址,这里就是将数据分散存储了。
你完全可以自己重新写成分配一串连续的地址。
纯属个人见解
解决方案三:
用指针指向指针的方法对5个字符串排序并输出
指针指向字符串的问题
用指向指针的指针的方法对字符串和整数排序
解决方案四:
sort里面的不带长度是因为形参p是二级指针,输入性质,即内存在主函数已经分配。那么P[i]就是char*了。
在sort里面交换的不是内存块,而是指针的指向,所以只要给temp分配一个char字节就足够啦。
再说主函数里面的char**p,他也是一个指针,只不过指向的是一个指针而已,它初始指向一个char*,P[I]就是一级指针,它的内存分配如上面所述
总之一句话,指针的指向就是一个地址,你可以给他分配一串连续的地址,也可以是一串分散的地址,这里就是将数据分散存储了。
你完全可以自己重新写成分配一串连续的地址。
纯属个人见解