小甲鱼老师在c语言零基础入门教程里的048课时的一段代码我看不懂,求指点
源代码如下:#include<stdio.h>
#include<string.h>
void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
char *name[] = {"Fishc.com","www.fishc.com","home.fhishc.com","Fuck you!","Thank you!"};
int n = 5;
sort(name, n);
print(name, n);
}
void sort(char*name[], int n)
{
char *temp;
int i, j, k;
for(i = 0; i < n - 1; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(strcmp(name, name) > 0)
{
k = j;
}
if(k != i)
{
temp = name;
name = name;
name = temp;
}
}
}
}
void print(char *name[], int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%s\n", name);
}
}
我看不懂的地方就是自定义的sort函数里的这一段:
if(k != i)
{
temp = name;
name = name;
name = temp;
}
这里的(k != i)是起的什么作用呢? 如果你这里都看不懂,那么你是不是全都看不懂。
for(i = 0; i < n - 1; i++)
{
k = i; // ik为索引,意为同时指向数组的第0号元素
for(j = i + 1; j < n; j++)
{
if(strcmp(name, name) > 0) // strcmp比较两个字符串 设这两个字符串为str1,str2,若str1=str2,返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
{
k = j;
}
if(k != i) // 经上面strcmp后可以确定name>name, k才会 != i。 只要不 > 都可以进行数据交换 ba21 发表于 2019-3-12 19:05
如果你这里都看不懂,那么你是不是全都看不懂。
for(i = 0; i < n - 1; i++)
{
谢谢老师关注~
前面的我都明白,您最后说的name > name,这个是肯定的。
但是为什么确定了name > name以后,k 就不等于 i 了呢?
学生愚钝,脑子转不过来,老师可以再解释详细一点吗? w45642323 发表于 2019-3-12 19:23
谢谢老师关注~
前面的我都明白,您最后说的name > name,这个是肯定的。
但是为什么确定了name
if(strcmp(name, name) > 0)
{
k = j;
} ba21 发表于 2019-3-12 19:51
if(strcmp(name, name) > 0)
{
k = j;
哦~原来是这样,谢谢老师指点~么么哒~
页:
[1]