佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1076|回复: 7

c++ 中的 array 问题

[复制链接]
发表于 22-1-2008 10:35 PM | 显示全部楼层 |阅读模式
刚刚在 multidimentional array 哪里发生问题, 就写了一个test driver 如下

  1. #include

  2. using std::cout;
  3. using std::cin;
  4. using std::endl;

  5. int main()
  6. {
  7.      int array[1][5];
  8.      int a ,b, index;
  9.      
  10.      cout << "array[a][b]\n" << endl;
  11.      
  12.      for(a = 0, index = 0; a <= 1 ; a++)
  13.            for(b = 0 ; b <= 5; b++, index++)
  14.            {
  15.                  cout << "a = " << a << " b = " << b << " index = " << index << endl;
  16.                  array[a][b] = index;
  17.                  cout << "array[" << a << "][" << b << "] = " << array[a][b] << "\n" << endl;
  18.            }
  19.            
  20.      for(a = 0; a <=1 ; a++)
  21.            for(b = 0 ; b <= 5; b++)
  22.                  cout << "array[" << a << "][" << b << "] = " << array[a][b] << endl;

  23.      cin >> a;
  24.      
  25. }
复制代码


http://onlylonly88.googlepages.com/code.txt

但是却在 array[0][5] 哪里发生错误, 这是结果



琢磨了很久还是找不出问题, 不知各位大大可否指点指点?

没错的话, 两者因该是要相同才对的, 都是同一个 array 来的。。 但是就是。。

对了,我使用 dev-c++ 4.9.9.2 , compiler 是 mingw, gcc version 是 3.4.2
回复

使用道具 举报


ADVERTISEMENT

发表于 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.
(是指你的例子)
回复

使用道具 举报

Follow Us
发表于 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时才有关系的.
回复

使用道具 举报


ADVERTISEMENT

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-9-2025 01:33 PM , Processed in 0.138158 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表