| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1845 人关注过本帖
标题:关于指向多维数组的指针和数组指针和指针数组的一些区别
只看楼主 加入收藏
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:6 
关于指向多维数组的指针和数组指针和指针数组的一些区别
程序代码:
#include<stdio.h>
void main()
{
    int a[2][3]={1,2,3,4,5,6},*p;  
    p=*a;
   
    printf("%d %d \n",*p,*(p+4));
}


/*#include<stdio.h>
void main()
{
    int a[2][3]={1,2,3,4,5,6};
    int (*p)[3]=*a;
    printf("%d\n",*(*(p+1)+1));
}*/
/*#include<stdio.h>
void main()
{
    int a[2][3]={1,2,3,4,5,6};
    int *p[2]={a[0],a[1]};
    printf("%d\n",*(*(p+1)+1));
}
*/
2016-08-16 11:21
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
上面的代码都是求数组a[1][1]的值。但所设的指针不一样,printf函数中
输出就不一样。*(p+5)和*(*(p+1)+1)输出的都是a[1][1]的值。
大家知道为什么吗?
2016-08-16 11:25
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
收藏
得分:0 
吃过饭的游侠们瞅瞅,给新手们加深一下数组和指针之间的知识~
2016-08-16 11:29
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
楼主的大概想试的就是下面这个程序。第一个代表数组a的第二行第二列的元素,第二个代表数组a的第5个元素,显然这两个结果一样。
#include<stdio.h>
 main()
 {
     int a[2][3]={1,2,3,4,5,6};
     int  (*p)[3]=a;
     printf("%d %d\n",*(*(p+1)+1),*(*p+4));
 }
2016-08-16 14:15
cppyjou
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分:16
注 册:2016-8-4
收藏
得分:5 
虽然定义的都是指针指向a[0][0]这个地址
但是int a[2][3]={1,2,3,4,5,6},*p;  
    p=*a;这样定义是指向列址,p+1相当于a[][]+1 ,就是a[0][1]
    所以p+5就是a[][]+5,按照列地址一个一个加,就是a[1][1]
然后注释掉的那部分
    int (*p)[3]=*a;指向的是行地址,*a前面没有*号吧?
    如果p+1的话,会直接指向a[1][0],所以(*(p+1)+1)就是a[1][1];
    不知道有没有说清楚,看看二维数组的资料就会有
2016-08-18 17:22
blza3127672
Rank: 2
等 级:论坛游民
帖 子:13
专家分:13
注 册:2012-7-19
收藏
得分:5 
无聊的问题, p是指针,p指向第一块内容,p+1表示指向下一块内容,主要是下一块内容,
而*代表取内容的意思,*p说明取p指向这块的内容,*P+1 表示取了这个内容,之后加1,
*你们可以看做取值的意思,方便理解
2016-08-19 11:10
zx315
Rank: 5Rank: 5
来 自:广东
等 级:职业侠客
威 望:2
帖 子:86
专家分:378
注 册:2016-7-13
收藏
得分:5 
数组名是指向数组第一个元素的元素的指针,对于 a[2][3] 来讲,它的第一个元素是有3个元素的一维数组,即其类型为 int (*p)[3] 。

至于 *(p+5) 和 *(*(p+1)+1) ,*(p+5) 是将二维数组当成了一维数组来对待(书中说,这对大多数 C 语言编译器而言这样做都是合法的,但这样做是否是个好主意则要另当别论。---《C语言程序设计-现代方法》第268页);而 *(*(p+1) + 1) 则还将其当作二维数组来处理。

Read The Fucking Source Code~
2016-08-19 13:00
快速回复:关于指向多维数组的指针和数组指针和指针数组的一些区别
数据加载中...
 
   



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

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