C++二维数组一开始赋值的问题

#include<iostream>usingnamespacestd;intmain(){inta,b;charn[11][5]={"ling","yi","er","... #include<iostream>
using namespace std;
int main()
{ int a,b;
char n[11][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"};
cin>>a>>b;
cout<<n[a][b];
system("pause");
}
像这样一个程序,n是一个二维数组啊,只有4列克为什么a=0,b=5和a=0,b=6
的时候分别输出y和i啊。还有为什么读取的时候只要n[]里面输入一个0到10的
数就可以了?赋值的时候不是从左到右按顺序的吗?那么n[1][4]应该是e啊。。会的指点一下。。
展开
 我来答
zhi5631
2010-08-10
知道答主
回答量:18
采纳率:0%
帮助的人:10.6万
展开全部

其实这个问题如果您看过《C专家编程》它就很简单了,上面对此问题有仔细的描述。它在内存里是如图所存的。n[0][5]其实就是*(*(n+0)+5)即第6个格子。所以输出是:y。同理你也就知道了n[0][6]为什么是i了。    第二个问题:因为是从0开始的,一共有11个,所以下标从0到10就可以了。多维数组其实就是数组的数组,char n[11][5];其实就相当于存储了11个字符串,每个字符串的长度是5,故只要用一个下标就可以引用了。比如n[1]其值其实就是指向"yi"的指针。  n[1][4]为什么不是e,其实是同样的道理,这个就留给你当练习乐吧。提示:字符串以'\0'结尾。            希望对您有帮助。

匿名用户
2010-08-10
展开全部
首先先提醒你注意一下,a=0,b=5以及a=0,b=6时已经溢出了,而非常幸运的是你这里,
char n[11][5]分配的空间在上面那种溢出的情况下,并没有完全越界,如果你有这种操作
n[11][5] = 0那么问题可能会变的很糟,c++的多维数组时理论上的,编译器最后会分配一段
线性的空间,以容纳指定维数所确定的数据,下标运算时编译器会自己计算出真正的偏移,
你那个溢出操作得到y是因为编译器计算后实际引用了n分配的55*sizeof(char)的空间的第6个元素,即"yi"的y,
很危险的操作~~请注意点吧
后面的问题没怎么看懂。。。。n[1][4]是'\0'而不是'e',你那种写法每个字符串对应一维,这样吧,给你看内存的样子
char [55] = {
0x6C, 0x69, 0x6E, 0x67, 0x00,
0x79, 0x69, 0x00, 0x00, 0x00,
0x65, 0x72, 0x00, 0x00, 0x00,
0x73, 0x61, 0x6E, 0x00, 0x00,
0x73, 0x69, 0x00, 0x00, 0x00,
0x77, 0x75, 0x00, 0x00, 0x00,
0x6C, 0x69, 0x75, 0x00, 0x00,
0x71, 0x69, 0x00, 0x00, 0x00,
0x62, 0x61, 0x00, 0x00, 0x00,
0x6A, 0x69, 0x75, 0x00, 0x00,
0x73, 0x68, 0x69, 0x00, 0x00
};

注意后面的 00 的分布。把每个双引号旁加 { },等效的,这样好懂些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式