c语言用指针数组对10个字符串排序(形参是如何影响原函数的?) - 爱问答

(爱问答)

c语言用指针数组对10个字符串排序(形参是如何影响原函数的?)

#include<stdio.h>

#include<string.h>

int main()

{

void sort(char *[]);

 int i;

char str[10][6], *p[10]

;for(i=0;i<10;i++)

scanf("%s",str[i]);

for(i=0;i<10;i++)

p[i]=str[i];

sort(p);

printf("the output 10 string: ");

for(i=0;i<10;i++)

printf("%s,",p[i]);

}


void sort(char *s[]) 

{char *temp;

int i,j;

for(i=0;i<9;i++)

for(j=i;j<10;j++)

if(strcmp(*(s+i),*(s+j))>0)

{temp=*(s+i); //

*(s+i)=*(s+j);//

*(s+j)=temp;//

}

}

问题:再函数里利用指针temp交换了指针数组,但这个数组指针不是另外开辟的空间吗?他是怎么使得原指针数组发生了改变的。麻烦了。


C里面的字符串最后都是以数0(也就是 '' 这个符号)来表示结尾的。
计算字符串的长度的函数在头文件<string.h>已经提供了,也就是这个strlen(const char *)。
然后呢,就是表示字符串的数组了,在C里字符串虽然是数组实现的,但现在这个字符串数组的意思却是“由字符串组成的数组”,而不是“组成字符串的数组”。
字符串是数组,是字符数组,数组的名称就是这个数组的首地址,字符串的名称就是这个字符串的首地址,存放字符串的数组存放的那就是首地址了,也好办,就是:
char **array;
我们来具体给他赋值:
1,给这个存放首地址的数组分配内存空间
int Size=10;
char **array=(char **)malloc( Size * sizeof(char *) );
2,然后给它的每一个元素赋上每一个字符串的首地址
array[0]="什么JB玩意";
array[1]="逗你玩呢";
....
3,然后根据字符串长度排序:
int i;
char *swap;
for(i=0;i<Size-1;i++){
   if(strlen(array[i])<strlen(array[i+1])){
       swap=array[i];
       array[i]=array[i+1];
       array[i+1]=swap;
   }
}
4,排序好后输出:
for(i=0;i<Size;i++)
   printf(array[i]);
好了,就这些了

相关标签:c语言

下一篇:arduion中如何编写程序

上一篇:程序关不掉

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?