黑眼睛 发表于 2020-10-22 21:45:02

请问大家,这里定义的i和j具体的意义是什么啊?看不太懂逻辑

#include <stdio.h>
#include <string.h>

int main()
{
      char *array = {"FishC", "Five", "Star", "Good", "Wow"};
      char *(*p) = &array;
      int i, j;

      for (i = 0; i < 5; i++)
      {
                for (j = 0; j < 5; j++)
                {
                        if (i > strlen((*p)) - 1)
                        {
                              break;
                        }
                        printf("%c ", (*p));
                }
                printf("\n");
      }

      return 0;
}

风过无痕1989 发表于 2020-10-22 21:45:03

本题的 i、j 定义的是行与列不容置疑,只是在本程序中,行变量 i 放到了列的位置,而列变量 j 放到了行的位置,这就让打印出来的数组改变了原来的位置,形成了另一番风格:

原本输出应该是这样的      顺时针旋转后是这样的      左右翻转后是这样的
       F is h C                              W G S F F                           F F S G W
       F iv e                                  oo tii                               iito o
       S ta r                                 wo a v s                           s v a o w
       G o o d                                    d re h                           h e r d
      W o w                                             C                            C

说明:
1、变量 i 与 j 不改变位置,输出的就是左边那个
2、顺时针旋转90度后,输出的就是中间那个 (这个要实现比较复杂一点)
3、旋转后再左右翻转,输出的就是右边那个 (这个的实现简单,只要 i 、j 位置互换就行)

风过无痕1989 发表于 2020-10-22 22:43:39

本帖最后由 风过无痕1989 于 2020-10-23 08:48 编辑

这个程序是将数组顺时针旋转90度后再左右翻转,i、j 定义的当然是数组的行和列哪

黑眼睛 发表于 2020-10-23 10:13:34

风过无痕1989 发表于 2020-10-22 21:45
本题的 i、j 定义的是行与列不容置疑,只是在本程序中,行变量 i 放到了列的位置,而列变量 j 放到了行的位 ...

谢谢!i和j代表什么我搞清楚了。还有一个问题,if (i > strlen((*p)) - 1)这句又是什么意思呢?

风过无痕1989 发表于 2020-10-23 10:28:17

黑眼睛 发表于 2020-10-23 10:13
谢谢!i和j代表什么我搞清楚了。还有一个问题,if (i > strlen((*p)) - 1)这句又是什么意思呢?

i 是循环变量,为保证其值不大于字符串的长度,而设置的一个判断,意思是如果超过(超过了就溢出了)字符串长度减1(减 1是因为字符串的末尾有一个结束标志,而用 strlen 来计算时,没有计算到这个标志),就中断循环
页: [1]
查看完整版本: 请问大家,这里定义的i和j具体的意义是什么啊?看不太懂逻辑