查看: 1076|回复: 7
|
c++ 中的 array 问题
[复制链接]
|
|
刚刚在 multidimentional array 哪里发生问题, 就写了一个test driver 如下
- #include
- using std::cout;
- using std::cin;
- using std::endl;
- int main()
- {
- int array[1][5];
- int a ,b, index;
-
- cout << "array[a][b]\n" << endl;
-
- for(a = 0, index = 0; a <= 1 ; a++)
- for(b = 0 ; b <= 5; b++, index++)
- {
- cout << "a = " << a << " b = " << b << " index = " << index << endl;
- array[a][b] = index;
- cout << "array[" << a << "][" << b << "] = " << array[a][b] << "\n" << endl;
- }
-
- for(a = 0; a <=1 ; a++)
- for(b = 0 ; b <= 5; b++)
- cout << "array[" << a << "][" << b << "] = " << array[a][b] << endl;
- cin >> a;
-
- }
复制代码
http://onlylonly88.googlepages.com/code.txt
但是却在 array[0][5] 哪里发生错误, 这是结果

琢磨了很久还是找不出问题, 不知各位大大可否指点指点?
没错的话, 两者因该是要相同才对的, 都是同一个 array 来的。。 但是就是。。
对了,我使用 dev-c++ 4.9.9.2 , compiler 是 mingw, gcc version 是 3.4.2 |
|
|
|
|
|
|
|
发表于 23-1-2008 02:41 AM
|
显示全部楼层
你 array 的 declaration 錯誤了。
int array[1][5];
其實等於 int array[5];
那就說,這個array裏只有 1x5 int ,共 5 個 int 的存量。
所以,你用 5個 int 來儲存 12 的 int。
前五個正確,后 7 個就不知道寫到系統或程序的何處去了。
因此所得到的,顯示的,並不是正確的。
如果你要 2x6 int 的,總共 12 個int 的 array,是這樣 declare 的:
int array[2][6];
以你的錯誤定義或不理解正確的語法,往往臭蟲(bugs)就是如此的由編程者本身加進去的。
[ 本帖最后由 Sunyata 于 23-1-2008 02:46 AM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 23-1-2008 11:19 AM
|
显示全部楼层
回复 2# Sunyata 的帖子
感激不尽, 忘了 array 最后一个是要来储存 \0 的。。 |
|
|
|
|
|
|
|
发表于 23-1-2008 12:02 PM
|
显示全部楼层
原帖由 onlylonly 于 23-1-2008 11:19 AM 发表 
感激不尽, 忘了 array 最后一个是要来储存 \0 的。。
不是array。而是字串string。
char s1[]={'H', 'e', 'l', 'l', 'o', '!' , 0};
等於
char *s2="Hello!";
strlen(s1)==6
strlen(s2)==6 |
|
|
|
|
|
|
|

楼主 |
发表于 23-1-2008 12:19 PM
|
显示全部楼层
回复 4# Sunyata 的帖子
看来我又搞错了
那么 array 最后储存的是什么? 是乱码吗?
看来是时候回去读书了。。 |
|
|
|
|
|
|
|
发表于 23-1-2008 03:18 PM
|
显示全部楼层
沒錯。
是已經corrupted的memory.
(是指你的例子) |
|
|
|
|
|
|
|
发表于 2-2-2008 03:58 PM
|
显示全部楼层
原帖由 onlylonly 于 23-1-2008 12:19 PM 发表 
看来我又搞错了
那么 array 最后储存的是什么? 是乱码吗?
看来是时候回去读书了。。
array 没有 initialize 才会存着乱码,但你这样的说法很奇怪,'\0' 是故意存进string 最后的,但乱码不是故意的,不能相提并论 |
|
|
|
|
|
|
|
发表于 9-2-2008 12:38 AM
|
显示全部楼层
在C,C++里面
char array[5];
代表你只能用
array[0]
array[1]
array[2]
array[3]
array[4]
因为这样已经是5个elements了,在C/C++是从零开始算起的
然后,关于\0来做string的terminator
是当你要把CString或std::string变成char array时才有关系的. |
|
|
|
|
|
|
| |
本周最热论坛帖子
|