用指向指针的指针,对字符串进行排序。
指向指针的指针,就是char ** pptr啦。pptr是一个指针,指向的地址内容存储的又是指向字符串的指针。
因此,首先要为pptr分配内存,存放指针,可以申请一个连续的区域来存放多个指向字符串的指针。
char ** pptr;
//为5个指针分配地址
pptr = (char**)malloc(5*sizeof(char*));
//再依次为指针数组具体赋予字符串常量
*pptr = (char*)malloc(128);
strcpy(*pptr, "Hello");
*(pptr+1)=(char*)malloc(128);
strcpy(*(pptr+1), "world");
*(pptr+2)=(char*)malloc(128);
strcpy(*(pptr+2), "Adam");
*(pptr+3)=(char*)malloc(128);
strcpy(*(pptr+3), "Bad");
*(pptr+4)=(char*)malloc(128);
strcpy(*(pptr+4), "Cat");
然后就用冒泡法排序,字符串比较大小用strcmp来得到。
void hjd_pointer_to_pointer()
{
int i=0, j=0;
int x=0;
char ** pptr;
//为5个指针分配地址
pptr = (char**)malloc(5*sizeof(char*));
*pptr = (char*)malloc(128);
strcpy(*pptr, "Hello");
*(pptr+1)=(char*)malloc(128);
strcpy(*(pptr+1), "world");
*(pptr+2)=(char*)malloc(128);
strcpy(*(pptr+2), "Adam");
*(pptr+3)=(char*)malloc(128);
strcpy(*(pptr+3), "Bad");
*(pptr+4)=(char*)malloc(128);
strcpy(*(pptr+4), "Cat");
for(i=4;i>0;i--)
{
for(j=i-1;j>=0;j--)
{
if(strcmp(*(pptr+i), *(pptr+j))<0)
{
//交换
char *tmp = *(pptr+i); //tmp实际上就是一个指针变量,记录具体字符串的地址
*(pptr+i) = *(pptr+j);
*(pptr+j) = tmp;
}
}
}
for(i=0;i<5;i++)
printf("%s\n", *(pptr+i));
free(pptr);
}