A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dawn.dai 中级黑马   /  2014-4-27 22:17  /  1856 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 dawn.dai 于 2014-4-27 23:29 编辑

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

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

11 个回复

倒序浏览
int *p =&a;会发生错误,因为类型不匹配。a已经代表首元素的地址了,&a就相当于(*)[10]了,即指向是个元素的数组指针了
int *p =(int *)(&a);此语句对了,虽然类型不匹配,但是用了强制类型转换,所以p指向了首元素,即代表首元素的地址。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
这个和上面是一个意思。&a是int a[10]类型,所以int *p =(int *)(&a);也是取首地址
回复 使用道具 举报
数组名就是数组首地址,不用再取地址了。
回复 使用道具 举报
int a[10]={1,2,3}; //这里应该定义一下数组的类型
a本身代表的就是元素的首地址,&a是错误的
int *p =&a[0];或int *p =a   //取出元素首地址
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
执着的土豆 发表于 2014-4-27 22:35
int *p =&a;会发生错误,因为类型不匹配。a已经代表首元素的地址了,&a就相当于(*)[10]了,即指向是个元素 ...

int a[]     
回复 使用道具 举报
兰闻天 发表于 2014-4-27 23:01
int a[10]={1,2,3}; //这里应该定义一下数组的类型
a本身代表的就是元素的首地址,&a是错误的
int *p =&a[0 ...

漏了            
回复 使用道具 举报

没看懂你回复的什么意思,能不能说详细点。
回复 使用道具 举报
int *p = &a是错的;实际是定义了一个数组指针。楼主先了解下数组指针的意思(int *p[]   和 int(*p)[]的区别。,意思就是P指向的单元是一个数组(a数组) p的类型应该是int (*p)[]这个形式。所以 最后一局int *p = (int *)&a;是强制将一个数组指针转换为一个整型指针。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
执着的土豆 发表于 2014-4-27 23:37
没看懂你回复的什么意思,能不能说详细点。

我的意思是int a[10] ={};    int类型被我漏写了,没事 谢谢解答,也谢谢大家
回复 使用道具 举报

下边那个,我也不懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马