鱼C论坛

 找回密码
 立即注册
查看: 2939|回复: 6

[已解决]p=a不对,不知道怎么改

[复制链接]
发表于 2016-3-6 16:46:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
void main()
{
      int a[2][3]={{1,2,3},{4,5,6}};
      int *P;
     p = a;   //这里编译时有错误 ,提示类型不同,有点不明白
      printf("%x %x\n",a[1],*(a+1));  //怎么打印出来的地址是一样的呢?
}


问题有两个:1.  p = a;   //这里编译时有错误 ,提示类型不同,有点不明白
                     2.*(a+1)这个应该怎么理解?
  问了下度娘:
http://zhidao.baidu.com/link?url=IMMrjY2BGDt4xs33lGoNwBdNfgA2lDk74ej9nIUjv9dh90kQ_yTqh136lEd48-abd3fOoVFU2e629uRhVRMeAa
a是二维数组,这里单写一个a可以表示指向一维数组的指针。
我觉得你可能需要:
p = &a[0][0];
就不会有警告了
追问:
1.这里的a不是既是二维数组名,又是二维数组的首地址吗?将地址赋给p应该没有问题呀?
2.如果写成p=a[0];或p=*a;都不会报错,这两个又问什么是正确的呀?
求解!非常谢谢哦~~~!
追答:
确实是地址没错,但是地址也是有类型的。

对于a[0][0]来说,它是第一行第一列的【元素】,所以类型是int
对于a[0]来说,它是第一【行】,所以类型是int [3]
对于a来说,它是整个矩阵,所以类型是int [3][3]

好,现在再来说指针
因为你也知道,在C语言里面指针和数组某种程度上说基本是一样的,于是
对于a[0][0]来说,它还是int
对于a[0]来说,它是int [3] 于是也可以是 int *,和p的类型相同
对于a来说,它是int [3][3] 于是也可以是 (int *)[3],用*对它解引用获得的是 int [3](于是它也可以是int *)于是类型和p相同了。
但是直接 p = a,类型不同,就出警告(在C++下是出错误)
我感觉好难理解哦,希望各位大神帮帮我,先谢谢啦!!!
最佳答案
2016-3-7 08:33:16
a[1]是一位数组名,它的值是数组中第一个元素的地址,即a[0][0]的地址
a是二位数组名,它的值也是数组中第一个元素的地址,即一位数组a[0]的地址,而a[0]的地址和a[0][0]的地址是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-7 01:11:39 | 显示全部楼层
本帖最后由 9528 于 2016-3-7 01:12 编辑

#include <stdio.h>

void main()
{
      int a[2][3]={{1,2,3},{4,5,6}};
      int *p;//大小写的问题
     p = a;   //这里编译时有错误 ,提示类型不同,有点不明白
      printf("%x %x\n",a[1],*(a+1));  //怎么打印出来的地址是一样的呢?
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-7 08:33:16 | 显示全部楼层    本楼为最佳答案   
a[1]是一位数组名,它的值是数组中第一个元素的地址,即a[0][0]的地址
a是二位数组名,它的值也是数组中第一个元素的地址,即一位数组a[0]的地址,而a[0]的地址和a[0][0]的地址是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-8 20:54:09 | 显示全部楼层
9528 发表于 2016-3-7 01:11
#include

void main()

谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-8 20:54:40 | 显示全部楼层
阿飞。 发表于 2016-3-7 08:33
a[1]是一位数组名,它的值是数组中第一个元素的地址,即a[0][0]的地址
a是二位数组名,它的值也是数组中第 ...

谢谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-8 21:26:19 | 显示全部楼层
#include<stdio.h>呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-10 14:23:36 | 显示全部楼层
a[2][3]    这里的a是指向一个一维数组的地址:
a[2][3][4]  这里的a是指向一个二维数组的地址;
这里的地址应该都是编译器自己定义的,其实值都是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表