【发布时间】:2021-11-12 14:37:09
【问题描述】:
我想使用紧凑符号访问二维数组。
如果数组被定义为如下的指针数组,那么如何解析数组元素呢?
int main(void)
{
char *a[2] = {
"databytes",
"dataword"
};
char **q = a;
return 0;
}
以下方法效果很好。
int main(void)
{
char a[2][10] = {
"databytes",
"dataword"
};
//char **p = a;
char *q = &a[0][0];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 10; j++)
printf("%c\n", *q++);
return 0;
}
【问题讨论】:
-
到目前为止你尝试了什么?
-
您可能没有将
'\0'值元素(所有未显式初始化的元素)视为终端中的字符。在我的情况下,我得到一个空行,但它们不是实际数据的一部分。 -
您可以将一个连续的内存区域视为一个由可变数量的指向可变大小字符串的指针组成的数组(通常的约定是在最后一个字符串之后使用两个
NUL字节)。在这种情况下,您分配给每个字符串的空间是已知的。但是,当您到达q时,这些知识已经丢失。另见c-faq.com/aryptr/pass2dary.html -
什么是“紧凑符号”?
then how I can parse through array elements?通常,就像二维数组一样,for(int i = 0; i < 2; i++) for(int j = 0; j < 5; j++) print("%c", a[i][j]); -
“以下方法效果很好”。这是未定义的行为,正如标准附录 J2 中明确指出的那样:“数组下标超出范围,即使对象显然可以使用给定的下标访问(如在左值表达式
a[1][7]中给出声明int a[4][5])"。
标签: c