社区
C语言
帖子详情
把二维数组看成一维数组的小问题
wit2188
2007-05-11 04:27:48
表达式*(指针变量+i)中,指针变量指向二维数组首地址,通过此式可算得二维数组中第i行对应的一维数组首地址。很奇怪这个表达式的结果是一个地址,何人能解?
...全文
669
14
打赏
收藏
把二维数组看成一维数组的小问题
表达式*(指针变量+i)中,指针变量指向二维数组首地址,通过此式可算得二维数组中第i行对应的一维数组首地址。很奇怪这个表达式的结果是一个地址,何人能解?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wit2188
2007-09-12
打赏
举报
回复
回复?
wit2188
2007-09-12
打赏
举报
回复
"a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址,也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。"
a是数组名,也就是地址,*a应该是二维数组首元素,怎么会与a[0]等效,也是一个地址呢?
stecdeng
2007-05-14
打赏
举报
回复
1
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}
设数组a的首地址为1000
C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。
a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a[0]等效的, 它表示一维数组a[0]0 号元素的首地址,也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。
同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。&a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。
由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。
此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。
另外,a[0]也可以看成是a[0]+0,是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。
************************************
你的问题
*(指针变量+i)中,指针变量是地址,加了i后仍是地址(正确 指针变量是地址 ,他的内容也是地址,记录内容为地址的内存的地址)
*(指针变量+i)按道理应该得到一个什么值,但不是地址(错 你凭什么认为*(指针变量+i)他不是地址呢? 他的内容就是地址)
指针变量指向这一行的首单元,加了i后,不过是往后移(指针变量的类型不同,加i移动的地址不同。)
stecdeng
2007-05-14
打赏
举报
回复
二维数组看成二重指针
然后
yuaijuan() 写得很明白了
因该这样解释吧!
*(指针变量+i)表示的是二维数组的第i行的地址,
**(指针变量+i)表示二维数组的第i行的地址的第一个元素值,
*(指针变量+i)+j表示二维数组的第i行第j列的值,
*(*(指针变量+i)+j)表示二维数组的第i行第j列的值。
其实还是一维数组没好好理解透彻的原因
wit2188
2007-05-14
打赏
举报
回复
*(指针变量+i)按道理应该得到一个什么值,但不是地址,要想得到地址,(指针变量+i)所指向的空间里存放的也要是地址才行。二维数组在内存中的空间其实还是一行,指针变量指向这一行的首单元,加了i后,不过是往后移,指向另一个单元,这个单元里放的怎么会是地址呢,实在无法想象。
我的困惑已经说得很清楚了,不知有没有人明白?
hjon
2007-05-11
打赏
举报
回复
假设二维数组用array来表示,例如:int array[3][3];
想像一下取第i行第j列的元素怎么取?即array[i][j],
那么再考虑一下array[i]表示什么?在这时候把array当成一维数组看,其实这个表达式跟*(array+i)是一样的,在二维数组中也是一个道理.
所以在你的例子中,*(指针变量+i)相当于"指针变量[i]",在二维数组里就表示一个地址.
yuaijuan
2007-05-11
打赏
举报
回复
因该这样解释吧!
*(指针变量+i)表示的是二维数组的第i行的地址,
**(指针变量+i)表示二维数组的第i行的地址的第一个元素值,
*(指针变量+i)+j表示二维数组的第i行第j列的值,
*(*(指针变量+i)+j)表示二维数组的第i行第j列的值。
wit2188
2007-05-11
打赏
举报
回复
老谭的书也许讲得真的很清楚,可我不解,既然您理解了,能否好好解释解释?
ho_ccssddnn
2007-05-11
打赏
举报
回复
*(指针变量+i)本来就是表示二维数组第i行的首地址的,**(指针变量+i)才是表示第i行第0个元素的内容
lastday2
2007-05-11
打赏
举报
回复
(指针变量+i)是一指针,其指向某一地址,加上*就是地址值
ayw215
2007-05-11
打赏
举报
回复
老谭的书讲的已经很清楚了
P6689
2007-05-11
打赏
举报
回复
**(指针变量+i)才对. *(指针变量+i)表示指针。
yulin11
2007-05-11
打赏
举报
回复
需要算法源代码的到
算法源码吧 http://www.sfcode.cn/
wit2188
2007-05-11
打赏
举报
回复
诸位都解释的头头是道,可我还是不解,*(指针变量+i)中,指针变量是地址,加了i后仍是地址,‘*’运算符是干什么的,取内容的,*(指针变量+i)怎么就得到一个地址呢,我不知诸位是怎么想象出来的,反正我想象不出来。
第9章 指针和数组-2指针和
二维数组
之间的关系1
第9章 指针和数组——指针和
二维数组
之间的关系C语言程序设计第9章 指针和数组换个角度看
二维数组
将
二维数组
a
看成
一维数组
,有2个“int[3]型”元素a代表二维
二维数组
的相关内容(与
一维数组
对比)
可以把
二维数组
看作成一个特殊的
一维数组
,这个特殊的
一维数组
的每一个单元都是一个
一维数组
。类比
一维数组
,
一维数组
的数组名为首元素地址,数据类型为指针,到了二位数组,因为也将它看作是
一维数组
,那么它的数组...
青少年C++编程NOIP/CSP竞赛通关语法-
二维数组
1、本课程为零基础C++语法专题课,是青少儿参加信息学奥赛NOIP/CSP需要学习的语法专题课; 2、本课程每节课均配有练习题以及真题,以锻炼孩子的解题能力;... 6、本课程介绍的是
二维数组
。也是历来竞赛重要考点。
二维数组
与
一维数组
1.
二维数组
与
二维数组
的初始化 定义:
二维数组
本质为以数组作为数组元素的数组,即“数组的数组”。...首先我们先定义一个
一维数组
和一个
二维数组
。 int arr[3][4]={{1,2,34,4},{5,6,7,8},{0,11,9,...
二维数组
与指针(详解)
一.2维数组 1.
二维数组
的定义 ...对于数组a,我们可以将a[3][4]分为两部分理解a[3]和[4],对于a[3],我们可以
看成
是一个
一维数组
,其元素分别为a[0],a[1],a[2],他们分别表示各行所代表的起始地址,而对于[4]...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章