详细解释:
uint8_t *rowoftext;
char *text[20] = {"string1","string2",.......,"srting20"};
uint8_t (可能)在头文件中的某处定义为:
typdef unsigned char uint8_t;
rowoftext 被声明为指针,并在文件范围内定义为指向 uint8_t 的指针,并分配了默认值 NULL。
text 声明为指向有符号字符的指针数组,并定义为 20*sizeof(char*) 的数组,在 32 位系统上为 80,在 64 位系统上为 160。
代码行,
rowoftext = (uint8_t *)text[textrow++];
如果您在此语句之前查看 rowoftext,它存储 NULL 或先前分配的指针值。现在变量 rowoftext 包含存储在 text[textrow] 中的指针(地址)。
textrow 的后增量增加了变量 textrow 的值,但使用了增量之前的 textrow 的值。这个成语在 C 和 C++ 中很常见。
以下两个声明有区别,
uint8_t *rowoftext;
uint8_t rowoftext[ integer_expression ];
第一个声明 rowoftext 是一个变量,其中包含一个指针,可以为该指针分配一个数组的基地址,然后通过递增指针来遍历数组。第二个声明了一个指向 uint8_t 元素数组的常量指针。这两个示例都声明了变量(原文如此),这些变量可以与 [] 运算符一起使用来寻址 uint8_t 数组,如下所示,
rowoftext[ integer ]
这相当于
*(rowoftext + integer)