| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 810 人关注过本帖
标题:我的概念疑惑
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
 问题点数:0 回复次数:14 
我的概念疑惑

定义数组时,如果不知道
需要的数组有多长时,如何定义呢?,

疑惑 1: 假如这个数组是二维或者三维?(如何定义)

*b="hello"; 可以用b[1]='h'; ------>>>
b[]="hello"; 可以用b[1]='h'; ----->>> 他们有着及其相似的几乎一样的操作

也就是说*b=是为数组初始化
也就是说b[]=是为数组初始化

疑惑 2: *b=和b[]=他们定义及在使用数组的区别在那里呢?

[此贴子已经被作者于2006-8-28 18:15:14编辑过]

搜索更多相关主题的帖子: 概念 
2006-08-28 10:33
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
收藏
得分:0 
疑惑 1: 假如这个数组是二维或者三维?(如何定义)
我没明白什么意思
疑惑 2: *b=和b[]=他们定义及在使用数组的区别在那里呢?
我理解是一个是指针一个是数组

2006-08-28 10:53
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
以前开过这个帖子。

不论是用数组还是指针,都需要一个固定的内存区域来存储数据,这点是肯定的

那么数组存储的方法可以是将数据分成几维,也可以是一维来处理。

void main()
{
int arr[3][3]={{0,0,0},{0,0,0},{0,0,0}};
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
cout<<&arr[i][j]<<endl;
}

指针和数组看起来有些类似,但是数组每个元素的地址就一定都是连续排列的。

而指针要想达到多维的效果,就和数组有点小区别了。//间断型连续

比如int *p[3];现在变量p[0],p[1],p[2]的地址是连续的,因为这是作为变量声明时的规则。

但是p[0]要指向一快内存(这里当然是连续的)用来存储数组数据中的第一层。

那么与p[1]指向的那一快地址(这里当然是连续的)用来存储第2层。他们这两快地址就不是连续的了。

p[2]也是如此。

void main()
{
int *p[3];
for(int k=0;k<3;k++)
cout<<&p[k]<<endl;
for(int i=0;i<3;i++)
{
p[i]=new int[3];
for(int j=0;j<3;j++)
{
p[i][j]=0;
cout<<&p[i][j]<<endl;
}
}
}

但是指针也指向一个“大块区域”:可以把多维数组用一个整体的内存区域来存储。

这样,数据地址都是连续的了。

void main()
{
int *p=new int[3*3];
p={0,0,0,0,0,0,0,0,0};
}


我这里只是说出部分区别,而不是过分强调连续不连续。

[此贴子已经被作者于2006-8-28 14:35:04编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-28 14:34
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 

谢谢楼上的程序!,
我得消化消化一下.!

[此贴子已经被作者于2006-8-28 14:38:33编辑过]

2006-08-28 14:36
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
以上是以2维数组为例的理解

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-08-28 14:37
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-28 16:54
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
收藏
得分:0 

但是p[0]要指向一快内存(这里当然是连续的)用来存储数组数据中的第一层。

那么与p[1]指向的那一快地址(这里当然是连续的)用来存储第2层。他们这两快地址就不是连续的了。

p[2]也是如此。

斑竹 这句话 是针对 二维数组说的吗


2006-09-04 16:50
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
收藏
得分:0 
cout<<&p[k]<<endl;
这句为什么要加&取地址符啊 跟P[K]有什么区别啊

2006-09-04 16:53
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
int *p[3];
for(int k=0;k<3;k++)
cout<<&p[k]<<endl;

这里是为了证明p[k]这个变量的地址是连续的。所以用取地址符&

而p[k]代表的是p[k]所指向的内存块的首地址值。当然不连续了。

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-04 17:43
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-09-04 17:50
快速回复:我的概念疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017617 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved