如何在不使用索引的情况下使用双维数组?

时间:2016-03-22 02:45:41

标签: c arrays pointers

我知道我可以使用与指针混合的数组。 例如,如果有像char words[6]= "abcde" ;这样的数组 我可以按printf("%c\n", *(words+i));打印一封信(我是索引卷)。

我想知道如果这个数组是双重的,我怎么能打电话给一个字母 (不使用数组索引但使用上面的指针)。

双维数组看起来像
char words[5][5] = {"car", "boat", "ship", "truck", "plane");

1 个答案:

答案 0 :(得分:0)

据我所知,通常有两种方法可以做到这一点:

方法1:

#include <stdio.h>

int main(void)
{
    char words[5][5] = {"car", "boat", "ship", "truck", "plane"};
    int i, j;
    for(i = 0; i < sizeof words / sizeof *words; i++)
        for(j = 0; j < sizeof *words / sizeof **words; j++)
            printf("%d:\t%c\n", *((char *)words + i * sizeof(*words) + j), *((char *)words + i * sizeof(*words) + j));
}

方法2:

#include <stdio.h>

int main(void)
{
    char words[5][5] = {"car", "boat", "ship", "truck", "plane"};
    int i;
    for(i = 0; i < sizeof words; i++)
        printf("%d:\t%c\n", *((char *)words + i), *((char *)words + i));
}

输出:

99:     c
97:     a
114:    r
0:  
0:  
98:     b
111:    o
97:     a
116:    t
0:  
115:    s
104:    h
105:    i
112:    p
0:  
116:    t
114:    r
117:    u
99:     c
107:    k
112:    p
108:    l
97:     a
110:    n
101:    e
  

我想知道有没有办法称呼整个词。我的意思是不使用%c,但是   %S。而且我想用scanf填充单词数组。我应该怎么做   它?

试试这个:

#include <stdio.h>

int main(void)
{
    char words[5][6];
    int i, j;
    for(i = 0; i < sizeof words / sizeof *words; i++)
        fgets(words[i], sizeof words[i], stdin); // not using scanf() to avoid buffer overflow
    for(i = 0; i < sizeof words / sizeof *words; i++)
        puts(words[i]);
}

words[i]的类型为char(*)[6],即6 char s的数组。