none
字符数组数组的非顺序访问 RRS feed

  • 问题

  • //数据结构:

    typedef struct square{
     int border;
     char * graph;
     square(int b){
      border = b;
      graph = (char*)malloc(b * b);
     }
    } Square;

    //定义:

    Square change = square(6);

    //初始化

    ...

    //处理

    border = change.border;

    printf("顺序输出的结果:\n");
      for(int i=0; i<border; i++){
       for(int j=0; j<border; j++){
        printf("(%d, %d) = %c  ", i, j, change.graph[change.border*i+j]);
       }
       printf("\n");
      }
      printf("跳着输出的结果:\n");
      for(int i=0; i<border; i++){
       for(int j=0; j<border; j++){
        printf("(%d, %d) = %c  ", border-1-j, i, change.graph[change.border*(border-1-j)+i]);
       }
       printf("\n");
      }

    输出的结果:

    第一个square:
    顺序输出的结果:
    (0, 0) = o  (0, 1) = o  (0, 2) = o  (0, 3) = b 
    (1, 0) = o  (1, 1) = o  (1, 2) = o  (1, 3) = o 
    (2, 0) = b  (2, 1) = b  (2, 2) = o  (2, 3) = o 
    (3, 0) = o  (3, 1) = o  (3, 2) = b  (3, 3) = o 
    跳着输出的结果:
    (3, 0) = o  (2, 0) = b  (1, 0) = o  (0, 0) = o 
    (3, 1) = ? (2, 1) = o  (1, 1) = b  (0, 1) = o 
    (3, 2) = ? (2, 2) = ? (1, 2) = o  (0, 2) = b 
    (3, 3) = ? (2, 3) = ? (1, 3) = ? (0, 3) = o 


    第二个square:
    顺序输出的结果:
    (0, 0) = o  (0, 1) = b  (0, 2) = o  (0, 3) = o  (0, 4) = o 
    (1, 0) = o  (1, 1) = o  (1, 2) = b  (1, 3) = o  (1, 4) = o 
    (2, 0) = o  (2, 1) = o  (2, 2) = b  (2, 3) = o  (2, 4) = o 
    (3, 0) = o  (3, 1) = o  (3, 2) = o  (3, 3) = o  (3, 4) = b 
    (4, 0) = b  (4, 1) = o  (4, 2) = o  (4, 3) = o  (4, 4) = o 
    跳着输出的结果:
    (4, 0) = o  (3, 0) = o  (2, 0) = o  (1, 0) = o  (0, 0) = b 
    (4, 1) = ? (3, 1) = o  (2, 1) = o  (1, 1) = o  (0, 1) = o 
    (4, 2) = ? (3, 2) = ? (2, 2) = o  (1, 2) = o  (0, 2) = o 
    (4, 3) = ? (3, 3) = ? (2, 3) = ? (1, 3) = o  (0, 3) = o 
    (4, 4) = ? (3, 4) = ? (2, 4) = ? (1, 4) = ? (0, 4) = o 


    第三个square:
    顺序输出的结果:
    (0, 0) = o  (0, 1) = o  (0, 2) = b  (0, 3) = o 
    (1, 0) = b  (1, 1) = o  (1, 2) = o  (1, 3) = o 
    (2, 0) = o  (2, 1) = o  (2, 2) = b  (2, 3) = b 
    (3, 0) = o  (3, 1) = o  (3, 2) = o  (3, 3) = o 
    跳着输出的结果:
    (3, 0) = o  (2, 0) = o  (1, 0) = o  (0, 0) = o 
    (3, 1) = ? (2, 1) = o  (1, 1) = o  (0, 1) = o 
    (3, 2) = ? (2, 2) = ? (1, 2) = o  (0, 2) = o 
    (3, 3) = ? (2, 3) = ? (1, 3) = ? (0, 3) = o 

    疑问:顺序输出的结果是正确的,为什么跳着输出就错了呢? 

    2010年11月14日 23:44

答案

  • 你确定程序其他位置没有修改change.graph的值么?

    我用你的代码试了一下

    没有问题啊

    • 已标记为答案 Daneill 2010年11月15日 5:02
    2010年11月15日 2:38

全部回复

  • 呼唤高手啊!!!!
    2010年11月15日 2:09
  • 你确定程序其他位置没有修改change.graph的值么?

    我用你的代码试了一下

    没有问题啊

    • 已标记为答案 Daneill 2010年11月15日 5:02
    2010年11月15日 2:38
  • 对不起大家了,是我弄错了。谢谢向立天!

    错误是,定义了#define ORIGINAL_SQUARE(i,j) original.graph[original.border*i+j]

    在后面使用的时候直接使用ORIGINAL_SQUARE(border-1-j,i),导致错误,正确的使用方法:ORIGINAL_SQUARE((border-1-j),i)

    2010年11月15日 5:01