w45642323 发表于 2019-3-12 18:44:29

小甲鱼老师在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)是起的什么作用呢?

ba21 发表于 2019-3-12 19:05:01

如果你这里都看不懂,那么你是不是全都看不懂。
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。 只要不 > 都可以进行数据交换

w45642323 发表于 2019-3-12 19:23:31

ba21 发表于 2019-3-12 19:05
如果你这里都看不懂,那么你是不是全都看不懂。
for(i = 0; i < n - 1; i++)
    {


谢谢老师关注~
前面的我都明白,您最后说的name > name,这个是肯定的。
但是为什么确定了name > name以后,k 就不等于 i 了呢?
学生愚钝,脑子转不过来,老师可以再解释详细一点吗?

ba21 发表于 2019-3-12 19:51:48

w45642323 发表于 2019-3-12 19:23
谢谢老师关注~
前面的我都明白,您最后说的name > name,这个是肯定的。
但是为什么确定了name

if(strcmp(name, name) > 0)
            {
            k = j;
            }

w45642323 发表于 2019-3-12 20:34:40

ba21 发表于 2019-3-12 19:51
if(strcmp(name, name) > 0)
            {
                k = j;


哦~原来是这样,谢谢老师指点~么么哒~
页: [1]
查看完整版本: 小甲鱼老师在c语言零基础入门教程里的048课时的一段代码我看不懂,求指点