C++ 用指向指针的指针的方法对5个字符串排序并输出时遇到的问题

问题描述

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]就是一级指针,它的内存分配如上面所述

总之一句话,指针的指向就是一个地址,你可以给他分配一串连续的地址,也可以是一串分散的地址,这里就是将数据分散存储了。

你完全可以自己重新写成分配一串连续的地址。

纯属个人见解

时间: 2025-01-21 05:59:07

C++ 用指向指针的指针的方法对5个字符串排序并输出时遇到的问题的相关文章

《指针的编程艺术(第二版)》一3.5 指向数组的指针

3.5 指向数组的指针 指针的编程艺术(第二版)ptr[4] 和 (ptr)[4] 所表示的意义是不同的.ptr[4]已在前面讨论过了,而(*ptr)[4]是指向数组的指针(pointer to array){XE "指向陣列的指標(pointer to array)"},表示ptr是一指针,指向一个有4个元素的数组,其实它也可视为是一个二维数组ptr[][4],因为和[]是互通的,我们以范例pointerToArray-1来说明. 范例pointerToArray-1 / point

2013-7-10学习笔记[字符串操作,指向函数的指针]

字符串处理函数1.strlen函数 这个函数可以用来测量字符串的字符个数,不包括\0 int size = strlen("mj"); // 长度为2     char s1[] = "lmj";  int size1 = strlen(s1); // 长度为3     char s2[] = {'m', 'j', '\0', 'l', 'm', 'j', '\0'};  int size2 = strlen(s2); // 长度为2    //在统计字符长度的时候

C++指向函数的指针用法详解_C 语言

本文以实例形式展示了C++指向函数的指针用法,是深入学习C++所必须掌握的关键知识点.分享给大家供大家参考之用.具体方法如下: 函数指针 现来看看以下声明语句,看看其含义: float (*h(int, void (*)(int)))(int); 以下是一个变量指针的定义语句: float* pf; 以下是一个普通函数的声明语句: float f(); 请看以下声明语句: float* g(); 因为()的优先级高于*, 所以相当于: float* (g()); g是一个函数, 返回值为floa

C/C++中字符指针数组及指向指针的指针的含义

就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针. 先看下面的代码,注意看代码中的注解: #include <iostream>#include <string>using namespace std; void print_char(char* array[],int len);//函数原形声明void main(void){//-----------------------------段1----------

Win8系统更换主题后桌面鼠标指针发生变化的解决方法

  Win8系统更换主题后桌面鼠标指针发生变化的解决方法          操作步骤: 1.在桌面上右键,单击"个性化"; 2.在"个性化"里单击"更改桌面图标"; 3.在桌面图标设置里单击"允许主题更改桌面图标"复选√去掉."确定"后完成; 4.如果需要修改鼠标的指针样式,可以在"个性化"里单击"更改鼠标指针",在指针选项卡里可以修改自己需要的指针样式.

函数指针 c语言 指针-C语言指向函数的指针的调用

问题描述 C语言指向函数的指针的调用 int *d_bubblesort(int a[]int n)//数组长度为n的冒泡降序排序{int ij;int temp;for(i=0;i {for(j=n-1;j>i;j--){if(a[j]>a[j-1]){temp=a[j-1];a[j-1]=a[j];a[j]=temp;} }}return(a);} void main(){int i;int *p;int a[10]={65412398710};int (*fun)(intint);fun

一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组?

问题描述 一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组? 例:这样一个数组,想定义一个指针的指针,指向它. int arr1[4][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; ps. 这个指针的指针 是 用来传递个函数的. 因为某种要求,需要向函数传递一个二维数组,函数的形参表中定义了 int **. 因此 这个指针的指针一定要能够传递函数,并且函数能够通过它操作二维数组元素. 解决方案 指向二维数组的

指向数组的指针如何用new初始化?

问题描述 int(*b)[3];inta[]={1,2,3};b=&a;上面这段代码可以编译通过,但是使用了数组a,而且规定了b的长度,怎样才能只有一个int(*b)[],然后使用new就把它初始化了? 解决方案 解决方案二:unsafe代码,太高端了--解决方案三:代码应该错了不少.解决方案四:不知道楼主想要的是什么效果,new关键字是用于动态开辟堆内存用的,不能对动态数组进行初始化,只能对一个对象进行初始化,如int*p=newint(1);通过int*p=newint[10](1);编译错

(c语言)利用指向结构的指针先输入数据,后打印数据,为什么会出现打印出来的都是0?

问题描述 (c语言)利用指向结构的指针先输入数据,后打印数据,为什么会出现打印出来的都是0? #include #define MAXFIRST 20 #define MAXLAST 20 #define G_STORE 3 #define A_STRORE 3 #define CSIZE 4 struct name { char first[MAXFIRST]; char last[MAXLAST]; }; struct student{ struct name s_name; float g