| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3939 人关注过本帖, 1 人收藏
标题:帮帮忙,找了半天不知道错哪了,要求用指针变量输出二维数组中任意一个元素 ...
只看楼主 加入收藏
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 5楼 小程序员、
*(p+(i-1)*4+(j-1)
你如果知道 *(p+i)是什么意思 就明白这个了
p+i 也就是p往后第i个地址

其实二维数组在内存也就是一个一维的空间而已,只是通过下标作为标记理解成二维数组
*(p+(i-1)*4+(j-1) 也就是 p 后面 第 (i-1)*4+(j-1)个位置的地址了,p是整形,所以就是表示了那个地址的一个int类型的数据

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-13 12:23
小程序员、
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-11
收藏
得分:0 
回复 7楼 wp231957
谢谢,,
2012-12-13 12:23
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用小程序员、在2012-12-13 12:20:57的发言:

哦,不是,测试就出差了,没有运行,照二楼说的改了,好了,,
???你的代码我没有改动直接就能运行啊,结果也对,我wintc

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 12:24
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
回复 10楼 yaobao
“p=a;这么用应该没问题吧,当然,我接触C没多长时间,我说错的情况占多数"
不可以

因为a是“指针的指针”,而p只是指针。

所以不可以这样

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-13 12:24
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用yaobao在2012-12-13 12:22:22的发言:

p=a;这么用应该没问题吧,当然,我接触C没多长时间,我说错的情况占多数
vc肯定不行 其他编译器就不清楚了

DO IT YOURSELF !
2012-12-13 12:26
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用小程序员、在2012-12-13 12:17:52的发言:

*(p+(i-1)*4+(j-1)   在这具体是什么意思??求详细解释。。谢谢
多维数组在内存中以行主序成线排列,所以(i-1)*4+(j-1)就是计算指针移动多少个元素

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 12:27
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用yuccn在2012-12-13 12:24:29的发言:

“p=a;这么用应该没问题吧,当然,我接触C没多长时间,我说错的情况占多数"
不可以

因为a是“指针的指针”,而p只是指针。

所以不可以这样
学习了,原来2维数组的数组名是指向指针的指针,以前不知道,谢谢

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 12:29
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:4 
回复 13楼 yaobao
看来你是时候换编译器了,呵呵!


[fly]存在即是合理[/fly]
2012-12-13 12:30
qq839431011
Rank: 4
来 自:河北
等 级:业余侠客
帖 子:105
专家分:296
注 册:2012-12-5
收藏
得分:4 
通过地址引用二维数组元素   &a[0][0]+4*i+j 代表的了数组a[i][j]的地址,能过间址运算符号,表达式*(&a[0][0]+4*i+j)代表了数组元素a[i][j]的存储单元

你定义的那个就应该是 数组元素a[i-1][j-1]的存储单元

穷则变,变则通,通则久 寂寞平淡
2012-12-13 12:34
深藏依旧
Rank: 2
等 级:论坛游民
帖 子:45
专家分:93
注 册:2012-12-8
收藏
得分:0 
#include <stdio.h>
 int main()
 {
     int a[3][4]={{0,1,2,3},{10,11,12,13},{20,21,22,23}};
     int (*p)[4],i,j;
     p=a;

 
 printf("input i and j:\n");
 scanf("i=%d ,j=%d",&i,&j);

 printf("a[%d][%d]=%d\n",i,j,*(*(p+i)+j));

 
return 0;
 }
我该的这应该没错吧
 怎么结果不对呢

厚积薄发
2012-12-13 12:42
快速回复:帮帮忙,找了半天不知道错哪了,要求用指针变量输出二维数组中任意一个 ...
数据加载中...
 
   



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

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