| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1619 人关注过本帖
标题:关于二维数组的问题
只看楼主 加入收藏
我爱南京
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-5-24
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
关于二维数组的问题
&p[0][0]=*(*(p+0)+0)=**p

我想问,*(p+0)为什么是p的地址,加个*号不是应该取(p+0)这个地址中的值吗
为什么*p=p
搜索更多相关主题的帖子: 维数 地址 
2019-03-06 20:51
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:3 
*p=p怎么可能
2019-03-06 21:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:3 
不知道你写的什么玩意儿

&p[0][0]=*(*(p+0)+0)=**p
也就是
&p[0][0] = p[0][0] = p[0][0]

&p[0][0] 是个右值,当然类型也不兼容。
2019-03-07 08:42
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:3 
先不管你写的这个东西有没有实际意义,来说说这些表达式是什么东西
&p[0][0],&p,p的值都是一样的,他们都是数组首元素的地址,但是它们想表达的意义是不同的。
p表达的是第0行的起始地址,如果用p+1则会得到第1行的起始地址。
&p表示二位数组的起始地址,如果用&p + 1则会得到下一个二维数组的起始地址(将整个二维数组p当成一个整体)
&p[0][0]表示第0行第0列的地址,如果用&p[0][0] + 1会得到第0行第二列的地址

可以用下面的代码清晰的测出这些意义上的不同:
程序代码:
#include <stdio.h>

void main() {
    int p[4][4] = {0};
    
    printf("p             value is 0x%x\n", (int)p);
    printf("&p            value is 0x%x\n", (int)&p);
    printf("&p + 1        value is 0x%x\n", (int)(&p + 1));
    printf("p + 1         value is 0x%x\n", (int)(p + 1));
    printf("p[0] + 1      value is 0x%x\n", (int)(p[0] + 1));
    printf("p[1]          value is 0x%x\n", (int)(p[1]));
    printf("&p[0] + 1     value is 0x%x\n", (int)(&p[0] + 1));
    printf("&p[0][0] + 1  value is 0x%x\n", (int)(&p[0][0] + 1));
}

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2019-03-07 13:03
吖吼
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2019-1-27
收藏
得分:3 
因为这是二维数组,可也这样理解*(p+0)是只向二维数组的第一行数,需要在加上*(*(p+0))来指向第一行的第一个
2019-03-10 13:24
快速回复:关于二维数组的问题
数据加载中...
 
   



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

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