更改char * variable = {“1”,“2”,“3”}索引

时间:2013-11-09 20:03:28

标签: c indexing char

这些天我在C身上生锈了。

我知道如何在char *数组中创建字符串列表,但有没有办法重新映射列表,以便第一个字符串索引为1,第二个字符串索引为5?

以下是我试图使用它的方式......

我有一个时钟程序,它在结构中将AM / PM值返回为0x00或0x40 myclockTimeStruct.RTC_H12(使用STM32f4xx芯片)。我有一个char* AM_PM= {"AM","PM"};变量。

我不想做我正在做的陈述。理想情况下,我想将PM重新索引到位置0x40,以便在读取代码时变得更加流式化。

我似乎记得它可以做到,但我不记得我在哪里看到它。也许这是我想到的另一件事?我想我总是可以在括号中加入63个逗号,但我认为它可以用不同的方式完成。

3 个答案:

答案 0 :(得分:2)

这就是我认为你要求的。其他建议也很好。

char * AM_PM[0x40+1] = { "AM", [0x40] = "PM" };

答案 1 :(得分:1)

您可以使用

AM_PM[rtc_h12 == 0x40 ? 1 : 0]

(这可以改写为更短,但IMO不太可读。)

答案 2 :(得分:1)

我建议做

AM_PM[rtc_h12 >> 6]

也就是说,有效地除以0x40给出01,它们可以索引到原始的双元素数组中。

如果有任何疑问rtc_h12可以返回除00x40以外的任何内容,那么您可以

AM_PM[(rtc_h12 << 6) & 1]

屏蔽低位,从而保证只获得01