C中char数组的初始值设定项异常



我有char数组的初始值设定项:

static const char dtmf_positions[] = "123A-------" "456B-------" "789C-------" "*0#D-------" "----E------" "-----F-----" "------G----" "-------H---" "--------J--" "---------K-" "----------L";

有人能解释一下,如何通过索引得到一些符号吗,例如符号"4"。非常感谢。

好的,那么我还有其他问题。在上面的数组中,有没有像二维数组那样,通过行和列索引来访问数组元素的方便方法?

根据C99规范,5.1.1.2翻译阶段

  1. 将连接相邻的字符串文字标记

您也可以在其他C规范中找到类似的文本。

所以

在翻译阶段CCD_ 1将变为CCD_。

所以你的定义类似于:

static const char dtmf_positions[] = "123A-------456B-------789C-------*0#D-----------E-----------F-----------G-----------H-----------J-----------K-----------L";

我希望现在你能找到任何符号的索引:)


编辑:您的附加问题:

/*第012345678910列*/static const char dtmf_positions[]="123A--------"/*第0行*/"456B--------"/*第1行*/"789C--------"/*第2行*/"*0#D--------"/*第3行*/"----E-------"/*第4行*/"-----F-----"/*第5行*/"-----G----"/*第6行*/"--------H---"/*第7行*/"--------J--"/*第8行*/"--------K-"/*第9行*/"---------------L";/*第10行*/#定义NCOLS(大小为("123A--------")-1)#定义FETCH_CHAR(ROW,COL)dtmf_positions[ROW*NCOLS+COL]

之后,您可以使用FETCH_CHAR(R,C) 访问任何字符

这是一个单独的C文本。该语言允许您通过在"间隙"两侧添加引号并在其间插入空白来拆分字符串文字(演示):

char *s = "AB" "CD";
printf("%sn", s);

与相同

char *s = "ABCD";
printf("%sn", s);

在格式化代码时,这样做通常是为了方便:也允许换行,这样你就可以将文字的一部分显示在垂直列中:

static const char dtmf_positions[] = "123A-------"
                                     "456B-------"
                                     "789C-------"
                                     "*0#D-------"
                                     "----E------"
                                     "-----F-----"
                                     "------G----"
                                     "-------H---"
                                     "--------J--"
                                     "---------K-"
                                     "----------L";

因此,如果您想找到字符'4'的索引,请从零开始计数,并跳过文字中的"间隙"以获得索引(您应该得到11)。

什么让您感到困惑?

char a[] = "someString";

与相同

char a[] = "some" "String";

因此,如果你知道如何访问第一个数组,那么你最好对第二个数组也这样做。

int i;
size_t len = strlen(a);
for(i=0;i<len;i++)
printf("%c ",a[i]);

对于C中的数组,索引从0开始。因此,如果您想访问数组的第一个元素,可以使用dtmf_positions[0]。如果你不知道元素的索引,你可以使用循环遍历数组并检查元素,或者你可以创建一些映射来存储所有元素的索引(以防字符重复),无论何时你想检查元素是否存在以及它们的位置,你都可以使用这个映射。

简单地说:

char c = dtmf_positions[11];

声明

static const char dtmf_positions[] = "123A-------" "456B-------" "789C-------" "*0#D-------" "----E------" "-----F-----" "------G----" "-------H---" "--------J--" "---------K-" "----------L";

与相同

static const char dtmf_positions[] = "123A-------456B-------789C-------*0#D-----------E-----------F-----------G-----------H-----------J-----------K-----------L";

它创建一个CCD_ 5阵列并用CCD_

如果您想获得一个字符,只需使用dtmf_positions[n],其中n是0到121之间的数字(121是字符)

最新更新