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啊。。会的指点一下。。 展开
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啊。。会的指点一下。。 展开
2个回答
展开全部
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 的分布。把每个双引号旁加 { },等效的,这样好懂些
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 的分布。把每个双引号旁加 { },等效的,这样好懂些
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询