| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1124 人关注过本帖
标题:关于指针和数组的一些问题(站内消息回复不了,所以搬过来立贴)
取消只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
 问题点数:0 回复次数:2 
关于指针和数组的一些问题(站内消息回复不了,所以搬过来立贴)
备注由于站内短信字数限制、能且只能发些简短的文字。这个问题我用短消息无法回复,所以现将聊天记录粘贴至此并回复。不过我个人建议其他网友以后善用“站内短信”功能,尽量不要用短信来提问题,因为这样你的问题就只有交流双方看得到,不能共享给其它网友,也听不到更多的声音,容易两个人聊一聊就一起“顺拐”了,错了都不知道。还是集思广益好。
   
站内短信你可以用于联系某篇帖子的当事人简要地与他交流一下他的发言,并不适用于你向他提问题。提问题应该在论坛发帖子。一方面,论坛不是学校不是公司,谁也不会24小时在线,确保及时给你回复,立帖子出来,别人也可以看到,谁都可以参与;另一方面,每一个人遇到的每一种状况其实都有前人踩过坑,也还会有其他人即将进坑,把这个问题从开始到解决的完整过程记录下来,后人就可以通过读贴自行解决问题了(我想这也是论坛之所以要保留有好几年前的旧帖子的原因了,可惜,没什么人去翻)
-------------------------------------------------------------------
zhushengnann 4 天前 17:35(如果需要匿名,请联系我)
int a[3][3]={1,2,3,4,5,6,7,8, 9}; printf(\"%d\",*(&a[2][0]-1)); 解释下输出语句,谢谢了
-------------------------------------------------------------------
书生牛犊 3 天前 18:26
&a[2][0]-1==&a[1][2]
*(&a[2][0]-1)==*(&a[1][2])==a[1][2]
至于前面的\\\"%d\\\" 这在我的软件上不能编译是个ERROR错误。
必须修正成 printf(\"%d\",*(&a[2][0]-1));才能看到运行结果 6
-------------------------------------------------------------------
书生牛犊 3 天前 18:32
你能遇到这样的代码,我默认你是知道 多维数组在内存中的实际存储情况,也做过用一维数组的方式去访问二维数组的测试
比如 int a[3][3]={0};int *p=a;
&p[i*3+j]==&a[i][j];
如果你看得懂我写的这两行代码并理解他为什么是这样的,我想你就能理解 &a[2][0]-1==&a[1][2]了。

至于\\\" 这是个转义字符,通常用在scanf或者printf的双引号之内。如果你给的代码确信没问题。那我也不知道是怎么回事。我刚学编程也才一年,懂得不多。
-------------------------------------------------------------------
zhushengnann 前天 21:13
谢谢
int a[3][3]={0};int *p=a;//这个是二维数组的都是0吗?//1
&p[i*3+j]==&a[i][j];//i*3+j我不懂。数组下标最多到2吧,解释下。新手自学,糊里糊涂的,谢谢你了 //2
-------------------------------------------------------------------
zhushengnann 前天 21:26
int k=2;*p1=k,*p2=k; p1=*p2;和*p1=p2怎么解释 //3
-------------------------------------------------------------------
zhushengnann 前天 21:35
int *p=&ha; 和*p=a;两句的*p含义相同么?都是在对p进行同时初始化吗?第二个不是在给他赋值吗? 将变量a的值赋给指针变量p,和将变量a的值赋给*p!!这两句话有差吗? //4
-------------------------------------------------------------------
zhushengnann 前天 21:55
https://bbs.bccn.net/thread-469528-1-1.html# //此贴已由管理员关闭,原因未知
-------------------------------------------------------------------
zhushengnann 昨天 01:07
http://www. 这里面解释有问题吗? //5
-------------------------------------------------------------------
zhushengnann 昨天 01:11
p是一个二维数组,二维数组在内存中是连续存储的.
*(p[i]+j)
p[i]表示的是指向第i行的指针,是int*型的.所以*(p[i]+j)其实和p[i][j]是一样的.
*(*p+i)+j)
这个少了个括号,应该是*((*p+i)+j)或者是*(*(p+i)+j)
如果是*((*p+i)+j)的话,*p指向的是第一行元素,那么这个式子其实就是*(p+i+j).就是从第一个元素开始数i+j个元素.
如果是*(*(p+i)+j)的话,这个其实和p[i][j]一样.
(*(p+i))[j]
p+i可以看成是p移动i行,解引用后指向第i行元素的首地址.下标运算[j]就是取第j个元素.和p[i][j]一样.
-------------------------------------------------------------------
zhushengnann 昨天 01:12
*(&p[0][0]+2*i+j)
&p[0][0]是取p[0][0]的地址,返回的是一个int*指针.+2*i+j其实就是从第一个元素开始向后移动2*i+j个元素.
*(p[0]+2*i+j)
这个其实是和*(&p[0][0]+2*i+j)一样的,因为p[0]和&p[0][0]都是指向第一行的元素,两个都是int*指针.地址一样的
-------------------------------------------------------------------


搜索更多相关主题的帖子: 当事人 聊天记录 短信 学校 
2016-10-10 11:50
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
//1   是!int a[3][3]={0};初始化数组,数组各位上都被写0,
//2   int*p=a;//这里我声明了一个int指针令他指向二维数组首地址,是想把这个二维数组当成一维数组来读写。此时p其实也等于a[0][0]的地址。
&p[i*3+j]==&a[i][j];正如你所已知,多维数组在内存中是连续存放的也就是说a[2][0]其实就在a[1][2]的后面。
再回头来讲讲这个p[i*3+j],他其实就是在p原本所指的地址基础上往右偏移了i*3+j个int类型的程序。然后p[i*3+j]就到了一个内存中的位置,而这个位置也正好就是a[i][j]    p[i*3+j]==a[i][j] ,这俩指向了同一个元素,自然他们被取到的地址也会一样。
关于这个  ,你可以查看 网易云课堂 > 程序设计入门-C语言(翁恺)> 第七周 7.1-3 指针与数组  一节,老师讲的很详细,我讲不清楚。
//3   你肯定抄错代码了。 应该是 int k=2*p1=k,*p2=k;//此处声明并初始化1个int k,两个指针p1,p2指向k
 p1=*p2;和*p1=p2  。//此处的*号应该理解为“取变量p2(p1)所指地址上的元素”。不过这里的*p2和*p1取到的是k的值2,是一个int类型数据,是不可以赋值给int型指针的。这个代码没的解释,错的。
//4   //3
int *p=&ha;//声明并初始化指针p指向ha,
*p=a;//这里的*是运算符“取元素”(专业术语我不清楚,反正就那样一个取的动作),此时p==&ha,而*p==ha,(*p=a)=等价于=(ha=a)
//5    我阅读了网友回复的前面一部分段落,没法现什么问题。都是对的,但是很绕口。这里不全面做详细解释,有什么不明白的看完视频,了解过指针和数组之间的关系后可以提问,会有人回复的
//最后两条消息好像是复制粘贴的,没什么好说的


[此贴子已经被作者于2016-10-10 12:50编辑过]


φ(゜▽゜*)♪
2016-10-10 12:42
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
补充链接如下,访问会被跳转到课程介绍页,点击查看存档就行了:
网易云课堂 > 程序设计入门-C语言(翁恺)> 第七周 7.1-3 指针与数组

http://mooc.study.

φ(゜▽゜*)♪
2016-10-10 12:47
快速回复:关于指针和数组的一些问题(站内消息回复不了,所以搬过来立贴)
数据加载中...
 
   



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

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