使用ptr按列读取

时间:2009-06-18 19:29:36

标签: c

如果我想按行

打印
char boo[] = 
     "abcd"
     "efgh"
     "ijkl"
     "mnop";

我会去

for(i = 0; i < 4; i++)
{
  char row[] = "";
  for(j = 0; j < 4; j+)
    printf("%c", *(boo++))
  putchar('\n');
  puts(row);

}

我的问题是如何打印列,以便我得到
aeim
bfjn
cgko
dhlp

3 个答案:

答案 0 :(得分:2)

因为它看起来像是一个家庭作业,我只想给你一个线索。

您的boo不是字符串数组 - 预处理器将所有相邻字符串文字粘合到一个字符串中,因此您有一个字符串“abcdefghijklmnop

您需要将其声明为

char *boo[] = {"abcd", "efgh", ...};

答案 1 :(得分:2)

其他解决方案涉及修改boo,你说这是违反规则,这里是一个简单的解决方案。只需使用一个内循环,它相对于外循环打印每个第4个字符。

int main() {
    int i, j;
    for(i = 0; i < 4; ++i) {
        for(j = 0; j < 4; ++j) {
            putchar(boo[i + j * 4]);
        }
        putchar('\n');
    }
}

以这种方式想到这一点,这是有效地手动处理嘘声,好像它是一个二维数组的字符。由于用2d索引1d数组的公式是(x + y * width),你可以想象我是x-coord而j是y-coord。

答案 2 :(得分:1)

#include <stdio.h>

int main (int argc, char* argv[])
{
    char *boo[] = {"abcd", "efgh", "ijkl", "mnop"};
    int i, j;

    for(i = 0; i < 4; i++) {
        for(j = 0; j < 4; j++)
            printf("%c", boo[j][i]);

        printf("\n");
    }
}

-m