黑马程序员技术交流社区

标题: 指针看了懂了 再看又乱了 [打印本页]

作者: dawn.dai    时间: 2014-4-27 22:17
标题: 指针看了懂了 再看又乱了
本帖最后由 dawn.dai 于 2014-4-27 23:29 编辑

int a[10]={1,2,3};
int *p =&a;//取出元素首地址
int *p =(int *)(&a);//这个怎么理解

作者: 执着的土豆    时间: 2014-4-27 22:35
int *p =&a;会发生错误,因为类型不匹配。a已经代表首元素的地址了,&a就相当于(*)[10]了,即指向是个元素的数组指针了
int *p =(int *)(&a);此语句对了,虽然类型不匹配,但是用了强制类型转换,所以p指向了首元素,即代表首元素的地址。

作者: 魅影穿眸    时间: 2014-4-27 22:36
这个和上面是一个意思。&a是int a[10]类型,所以int *p =(int *)(&a);也是取首地址
作者: 傘が咲く    时间: 2014-4-27 22:41
数组名就是数组首地址,不用再取地址了。
作者: 兰闻天    时间: 2014-4-27 23:01
int a[10]={1,2,3}; //这里应该定义一下数组的类型
a本身代表的就是元素的首地址,&a是错误的
int *p =&a[0];或int *p =a   //取出元素首地址
作者: Er01c    时间: 2014-4-27 23:08
  1. int main(int argc, const char * argv[])
  2. {
  3.    

  4.     int a[10] = {1, 2, 3};
  5.     int *p1 = a;
  6.     int *p2 = (int *)(&a);
  7.    
  8.     printf("%X, %X\n", a, &a); // 地址一样
  9.    
  10.     printf("%i %i\n", sizeof(a), sizeof(&a)); // 所占内存空间不同
  11.    
  12.     // a 相当于 &a[0],而 &a 是一个指向 int[10] 的指针,类型是 int(*)[10]

  13.     return 0;
  14. }
复制代码

作者: dawn.dai    时间: 2014-4-27 23:29
执着的土豆 发表于 2014-4-27 22:35
int *p =&a;会发生错误,因为类型不匹配。a已经代表首元素的地址了,&a就相当于(*)[10]了,即指向是个元素 ...

int a[]     
作者: dawn.dai    时间: 2014-4-27 23:31
兰闻天 发表于 2014-4-27 23:01
int a[10]={1,2,3}; //这里应该定义一下数组的类型
a本身代表的就是元素的首地址,&a是错误的
int *p =&a[0 ...

漏了            
作者: 执着的土豆    时间: 2014-4-27 23:37
dawn.dai 发表于 2014-4-27 23:29
int a[]

没看懂你回复的什么意思,能不能说详细点。
作者: gaoxinglei123    时间: 2014-4-28 08:03
int *p = &a是错的;实际是定义了一个数组指针。楼主先了解下数组指针的意思(int *p[]   和 int(*p)[]的区别。,意思就是P指向的单元是一个数组(a数组) p的类型应该是int (*p)[]这个形式。所以 最后一局int *p = (int *)&a;是强制将一个数组指针转换为一个整型指针。
作者: dawn.dai    时间: 2014-4-28 11:50
执着的土豆 发表于 2014-4-27 23:37
没看懂你回复的什么意思,能不能说详细点。

我的意思是int a[10] ={};    int类型被我漏写了,没事 谢谢解答,也谢谢大家
作者: 兰闻天    时间: 2014-4-28 12:15
dawn.dai 发表于 2014-4-27 23:31
漏了

下边那个,我也不懂




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2