2017-03-18 54 views
0
char pres[4][2][11] = { 
    "George", "Washington", 
    "John", "Adams", 
    "Thomas", "Jefferson", 
    "James", "Monroe" 
}; 

有人可以解释为什么pres数组是三维的吗?我试着用二维的循环(pres[4][2])显示pre数组,但是它不起作用。c字符串数组维数

+0

你是怎样尝试显示呢?数组声明/初始化看起来很好...... – Dmitri

+1

这似乎是一个数组''[8] [11]',即使它有效,您更喜欢'char pres [4] [2] [11] = { {“George” ,“华盛顿”}, {“John”,“Adams”}, {“Thomas”,“Jefferson”}, {“James”,“Monroe”} };' –

+0

把它想象成2-二维数组的字符串。字符串本身是一维字符数组,并且2 + 1 = 3。 –

回答

-1

这是因为C中定义了一串字符。在C中,一个字符串只是一个单个字符的数组,如果你想在一个数组中使用多个单词,则必须给出一个数组数组。

在你的情况下,你想要将字符串分隔成单独的列,例如C++可以作为字符串数组[] []给出,但是在C中,您将不得不应用另一个“图层”来表示字符串他们自己。

+1

“C中的字符串只是单个字符的数组” - 单词“just”可能存在问题,因为这可以理解为“字符串”和“字符数组”是简单的同义词,这是错误的。它提醒初学者关于无效终止符的重要性从未受伤。 –

1

这是一个三维字符数组,因为它在概念上是一个二维数组字符串,而字符串是一维空字符终止数组。

尽管这样做有效,但这种方法的缺点是它只能保存长度为10的字符串(为空终止符留下空间)。出于这个原因,使用char *的数组并倾向于更灵活,然后根据实际字符串的需要分配和释放空间。你说你试过看pres[4][2]。这是没有意义的,因为数组索引是从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 
+0

感谢您的解释。 – max

+0

@max如果你是从像Python或Java这样的语言(大多数情况下)为你处理所有复杂性的C语言中,C语言中的字符串很难包围你的思想。 Stack Overflow的共同创始人之一Joel Spolsky撰写了我曾阅读过的最好的博客文章之一:https://www.joelonsoftware.com/2001/12/11/back-to-basics/ –

+0

感谢您的来源。 – max