我正在研究一个我没有写过的C程序,并将它与我的C ++代码集成在一起。这个C程序有一个字符数组和用法putc函数来打印它的内容。像这样:
printf("%c\n","01"[b[i]]);
这是一个位数组,可以有ASCII 0或ASCII 1(非ASCII 48和49请注意)。该命令完美地打印“0”和“1”。但是,我不明白在putc命令中使用“01”。我也可以打印这样的内容:
printf("%d\n",b[i]);
因此我只是好奇。谢谢。
新手
答案 0 :(得分:4)
"01"
是一个字符串文字,所有意图和目的都是一个数组。这有点奇怪......你可以写:
char *characters = "01";
printf("%c\n", characters[b[i]]);
或者甚至更好:
char *characters = "01";
int bit = b[i];
printf("%c\n", characters[bit]);
初看起来会更容易理解。
答案 1 :(得分:1)
令人讨厌的工作方式,但无论是谁写的都是使用b的内容作为字符串的引用,“01”:
"foo"[0] <= 'f'
"bar"[2] <= 'r'
"01"[0] <= '0'
"01"[1] <= '1'
你的数组b包含0和1,而作者想要一种快速将它们转换为'0'和'1'的方法。他可以轻松地做到:
'0' + b[i]
但这是另一种犯罪行为。 =]
答案 2 :(得分:1)
字符串“01”被转换为字符数组(字符串在C中),而b [i]指定0或1,因此它的“分解”视图将是。
"01"[0]
或
"01"[1]
哪个会从char数组“string”中选择“right”字符。请注意,这只是可能的C,因为字符串是指向字符的指针。因此,[...]操作变为一个内存偏移操作,等于指针类型的一个项目的大小(在这种情况下,一个字符)。
是的,你的printf会好得多,因为它需要较少的晦涩“c”技巧。
答案 3 :(得分:0)
这一行说的是采用字符数组"01"
并引用数组元素。从b [i]位置获取该索引。
因此"01"[0]
会返回字符0
而"01"[1]
会返回字符1
答案 4 :(得分:0)
做你理解的陈述。
通过将b[i]
替换为索引来简化另一个,我们得到
"01"[index]
字符串文字("01"
)的类型为char[3]
。获取其索引0
或1
(或2
)即可,并返回字符'0'
或'1'
(或'\0'
)。