c字符串数组维度

时间:2017-03-18 16:39:47

标签: c arrays printing

const arr = [
  obj1 = {
    key1: val1,
    key2: val2,
    key3: val3
  },
  obj2 = {
    key3: val3
  },
  obj3 = {
    key1: val4,
    key2: val5,
    key3: val1
  },
  obj4 = {
    key1: val6,
    key2: val7
  }
]

有人可以解释为什么char pres[4][2][11] = { "George", "Washington", "John", "Adams", "Thomas", "Jefferson", "James", "Monroe" }; 数组是三维的吗?我尝试使用二维循环显示pre数组(pres),但是,它不起作用。

2 个答案:

答案 0 :(得分:1)

这是一个三维的字符数组,因为它在概念上是一个二维的字符串数组,而字符串是一维的以空字符结尾的字符数组。

虽然这确实有效,但这种方法的缺点是它只能保存长度为10的字符串(为空终止符留出空间)。因此,使用char *数组会更灵活,然后根据实际字符串的需要分配和释放空间。

你说你试过看pres[4][2]。这是没有意义的,因为数组索引在C中是从0开始的。pres[3][1]将是"Monroe" - 数组中的最后一个字符串。

要打印它们都非常简单:

#include <stdio.h>

int main(void){
    int i;
    char pres[4][2][11] = {
        "George", "Washington",
        "John", "Adams",
        "Thomas", "Jefferson",
        "James", "Monroe"
    };
    for(i=0;i<4;i++) printf("President %s %s\n",pres[i][0],pres[i][1]);
    return 0;
}

哪个输出:

President George Washington
President John Adams
President Thomas Jefferson
President James Monroe

答案 1 :(得分:-1)

它是因为在C中定义了一串字符。 在C中,字符串只是一个单个字符的数组,如果您想在数组中使用多个单词,则必须提供一个数组数组。

在您的情况下,您希望将字符串分隔为单独的列,例如C ++将作为字符串数组[] []给出,但在C中,您必须应用另一个&#34;层&#34;代表字符串本身。