xiaohu168888 发表于 2016-3-6 16:46:11

p=a不对,不知道怎么改

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


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

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

好,现在再来说指针
因为你也知道,在C语言里面指针和数组某种程度上说基本是一样的,于是
对于a来说,它还是int
对于a来说,它是int 于是也可以是 int *,和p的类型相同
对于a来说,它是int 于是也可以是 (int *),用*对它解引用获得的是 int (于是它也可以是int *)于是类型和p相同了。
但是直接 p = a,类型不同,就出警告(在C++下是出错误)
我感觉好难理解哦,希望各位大神帮帮我,先谢谢啦!!!

9528 发表于 2016-3-7 01:11:39

本帖最后由 9528 于 2016-3-7 01:12 编辑

#include <stdio.h>

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

阿飞。 发表于 2016-3-7 08:33:16

a是一位数组名,它的值是数组中第一个元素的地址,即a的地址
a是二位数组名,它的值也是数组中第一个元素的地址,即一位数组a的地址,而a的地址和a的地址是一样的

xiaohu168888 发表于 2016-3-8 20:54:09

9528 发表于 2016-3-7 01:11
#include

void main()


谢谢。

xiaohu168888 发表于 2016-3-8 20:54:40

阿飞。 发表于 2016-3-7 08:33
a是一位数组名,它的值是数组中第一个元素的地址,即a的地址
a是二位数组名,它的值也是数组中第 ...

谢谢。

小鸟儿 发表于 2016-3-8 21:26:19

#include<stdio.h>呢

ligen超越 发表于 2016-3-10 14:23:36

a    这里的a是指向一个一维数组的地址:
a这里的a是指向一个二维数组的地址;
这里的地址应该都是编译器自己定义的,其实值都是一样的{:10_256:}
页: [1]
查看完整版本: p=a不对,不知道怎么改