黑马程序员技术交流社区
标题: 字符串 排序问题 为什么这*temp,而不是temp [打印本页]
作者: peide0427 时间: 2015-11-7 23:06
标题: 字符串 排序问题 为什么这*temp,而不是temp
//从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。
#include <stdio.h>
#include <string.h>
int main()
{
//定义六个内存为50的char型变量
char ch1[50];
char ch2[50];
char ch3[50];
char ch4[50];
char ch5[50];
char ch6[50];
char *ch[6]={ch1,ch2,ch3,ch4,ch5,ch6};//定义字符串数组ch[]
printf("请依次输入6个字符串:(仅仅包含英文字母和数字),回车确认\n");//提示用户输入字符串
for (int m=0; m<6; m++) {
printf("请输入第%d个字符串\n",m+1);
scanf("%s",ch[m]);
}
for (int i=0; i<5; i++) {//采用冒泡法 大数下沉法排序
for (int j=0; j<5-i; j++) {
if (strcmp(ch[j],ch[j+1])>0) {
char *temp = ch[j]; //请问大牛为什么这里要建立*temp,而不是temp,ch[]是存储的字符串,不是地址啊
ch[j]=ch[j+1];
ch[j+1]=temp;
}
}
}
for (int i=0; i<6; i++) {
printf("%s ",ch);//按从小到大重新输出新的字符串数组
}
printf("\n");
return 0;
}
作者: daitoudainaoali 时间: 2015-11-8 00:14
因为ch[j]里的j取值为0,1,2,3,4,代表ch[0],ch[1],ch[2],ch[3],ch[4],ch[5],ch[6]要依次参与比较,指针类型变量temp指的是六个字符串数组,里面存放的是当时指向的字符串首元素的地址,对于字符串来说.里面放了好多字符,其实交换地址,就可以直接改变里面的内容
作者: 陌忆 时间: 2015-11-8 11:08
char *ch[6]={ch1,ch2,ch3,ch4,ch5,ch6}; 这里不是char类型的指针数组么。。。
作者: black747521 时间: 2015-11-8 13:10
ch是一个指针数组,而并不是你所说的字符串数组。里面存放的都是指针,是你定义的6个字符串的首地址。字符串的名称,就是代表的字符串第一个元素的首地址。
作者: Morning_jcg 时间: 2015-11-8 13:15
再仔细读读代码哟,看清楚,ch[]是一个char型数组的头指针。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |