我知道我可以使用与指针混合的数组。
例如,如果有像char words[6]= "abcde" ;
这样的数组
我可以按printf("%c\n", *(words+i));
打印一封信(我是索引卷)。
我想知道如果这个数组是双重的,我怎么能打电话给一个字母 (不使用数组索引但使用上面的指针)。
双维数组看起来像
char words[5][5] = {"car", "boat", "ship", "truck", "plane");
答案 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的数组。