| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2208 人关注过本帖
标题:有关教材中二维数组基类型和存储单元的疑问
只看楼主 加入收藏
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
举例:
有这样一个定义
int a[2][2];
int (*p)[2];
p = a;
p += 1;

在这段代码中,步长是 int [2] 所占用的字节数,但是这个类型占用多少字节,并不需要太过于关心,你只需要知道,对指针p + 1产生的结果是 p 指向的是数组的第二个元素,即a[1]


[此贴子已经被作者于2017-5-26 16:45编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-26 16:43
何小达
Rank: 2
等 级:论坛游民
威 望:1
帖 子:24
专家分:70
注 册:2017-5-25
收藏
得分:0 
你用的编译器的问题,VC6.0的是四个字节,Turbo3.0和2.0都是2个字节,而且我们现在学的都是turbo3.0的版本的
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-05-26 19:58
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用william1993在2017-5-26 10:50:57的发言:

高教版C语言教材中有关二维数组和指针关系的部分,有几条说明我没有看明白,想求论坛大神帮忙解惑。
1.定义如下:
  int *p, a[3][4];
  在此定义下,教材中说a[0]+1中的1应该理解为2个字节。但是前面我看到,在vc6.0的环境下,int类型的数据是占用4个存储单元的,a[0]既然代表的是二维数组中第一行的首地址值,+1就应该代表a[0][1]的地址值,也就是变化了一个存储单元才对,那么1应该是4个字节啊,为什么是2个字节呢?
2.教材中说,以上a数组,数组名a的值与a[0]的值相同,只是其基类型为具有4个整形元素的数组类型。请问这个“其”是指a还是a[0]?或者再详细的问下,如何理解a与a[0]的基类型不同,不都是int类型吗?为什么定义中的指针变量p与a[0]的基类型相同,与a就不同了呢,a不也是个地址值么,为什么不可以赋值给p?

1、int类型是2字节还是4字节,这与编译环境有关,如16位编译是2字节,32位编译是4字节。
2、不清楚“基类型”的叫法。
    int a[3][4];表达的是定义一个数组a。编译器根据指定的元素个数(3*4=12)和元素的类型(int)分配确定大小(元素类型大小*元素个数)的一块内存,并把这块内存的名字命名为a。a[0][0]、a[0][1]等为a的元素,但并非元素的名字,数组的每一个元素都是没有名字的。
    a不能作为左值!这点与指针p不同,有说法相当于“常量”指针,其实a只是一个名,不象p变量有名有份,有自己的地址(&p)。
    a作为右值,有说法是数组的首地址,其实代表的是数组首元素的首地址,而不是数组的首地址,a作为右值时其意义与&a[0][0]是一样。
    用指针p去操作a:
    取第一个元素首地址 p = &a[0][0];
    取第一行首元素地址 p = &a[0][0];
    取第二行首元素地址 p = &a[1][0];
2017-05-26 22:09
快速回复:有关教材中二维数组基类型和存储单元的疑问
数据加载中...
 
   



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

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