| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2285 人关注过本帖
标题:关于二维数组地址的表示方法求解惑!~
只看楼主 加入收藏
悠闲的紫
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-10-13
收藏
 问题点数:0 回复次数:10 
关于二维数组地址的表示方法求解惑!~
一个正常的二维护数组可以用下面的方法赋值
如: char a[2][3]={"abc","def"};
一般是赋初值的时候这样用的吧.
那么调用时可把二维数组看成是两个一维的数组.
  在一维数组中 如:int nub={1,2,3,4,5};
在一维数组中nub,不仅带表了一维数组的数组名,
它还是一个地址(它代表nub这个数组中第一个数的
地址,也就是数组的首地址.)

那么在二维数组a[2][3]={"abc","def"};中,a它代表
的就是这个二维数组中第一个一维数组的地址.
但这样理解是错的.
真正代表这个二维数组中第一个一维数组的地址的是
a[0],而a表示的是二维数组中第一个一维数组的第一
个数的地址.当然&a[0][0]也表示的是这个数.
那么a      &a[0][0]  之间有着什么样的差别呢?

[[it] 本帖最后由 悠闲的紫 于 2008-10-20 16:58 编辑 [/it]]
搜索更多相关主题的帖子: 解惑 地址 
2008-10-20 16:15
欧阳君雅
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-9-29
收藏
得分:0 
有差别吗....
2008-10-20 16:25
悠闲的紫
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-10-13
收藏
得分:0 
如下面的一段代码
#include<stdio.h>
void main()
{
    int nub[2][3]={{1,2,3},{4,5,6}};
    printf("please press key:");
    
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            printf("%4d ",(*(a+i))[j]);

        }printf("\n");
    }
}

把知识都和我说
2008-10-20 16:30
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
很欣赏LZ的探索精神。a和&a[0][0]有什么不同?很简单,类型不同。
比如&a[0][0]只是一个普通的char *类型的地址,可以赋给char *.而a的值可以说和&a[0][0]是一样的,但是a是一个指向一维数组的指针可以赋值给char (*)[3].
另外注意下3楼的代码规范void main,包括在for里面写int.
关于数组元素和指针的差别可以见下 C专家编程

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-20 16:41
liumang_D
Rank: 2
来 自:计算机
等 级:论坛游民
威 望:1
帖 子:89
专家分:50
注 册:2008-10-20
收藏
得分:0 
他们的值都是一样的,指的都是同一个内存地址
2008-10-20 16:45
悠闲的紫
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-10-13
收藏
得分:0 
两段for嵌套中要不断的循环调用数组,
区别在于 :
   第一段中scanf调用的是二维数组的每个地址.
而第二段printf是调用每个scanf输入二维数组的值.

表示二维数组的值的方法:
首先最容易理解的就是  a[i][j]

进而==>用  *(a[i]+j)   表示,

更进一步==>  *(*(a+i)+j)

在后来==>   (*(a+i))[j]

也能表示.

把知识都和我说
2008-10-20 16:45
悠闲的紫
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-10-13
收藏
得分:0 
可是我不明白.....
这么多表示的方法都应该怎么去理解:......
比如:
*(a[i]+j)    *(*(a+i)+j)
中....
a[i] 指的是什么?   a[i]和 *(a+i)是否有什么不同
没有不同 那 *(*(a+i)+j)  中的 (a+i) 代表的是个什么东东?

把知识都和我说
2008-10-20 16:52
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
回复 6# 悠闲的紫 的帖子
第一,最好注意一下你的代码格式。第二,最好不要用(*(a+i))[j]
有意思么?谁都知道a[i]就是*(a+i),而a+i就是i+a,难道就把把a[i]写成i[a]。
要么 *(*(a+i)+j),a[i][j]
简单易懂,多好

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-20 16:56
悠闲的紫
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-10-13
收藏
得分:0 
qfyzy大大!~~
我不是不想写规范的格式,
是我根本就不知道怎么写才算规范.
而且对c很多东西都不了解.
现在我对c的了解真的是少知又少.
还请不惜赐教.最好还能推荐几本
打包的c电脑书.能从最初级的最好.

把知识都和我说
2008-10-20 17:06
qfyzy
Rank: 2
等 级:论坛游民
威 望:1
帖 子:380
专家分:86
注 册:2008-2-17
收藏
得分:0 
你的问题,我4#就回复了。我只是很不明白
诸如 for(int i=0;i<2;i++),是在哪地方学到了

当对C的经验增加时,它会显的很好用.----Dennis M Ritche如是说
2008-10-20 17:15
快速回复:关于二维数组地址的表示方法求解惑!~
数据加载中...
 
   



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

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