注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zhouhaigang.love的博客

喜欢冬日黄昏那冻住的山

 
 
 

日志

 
 

关于数组与指针  

2011-02-17 22:15:48|  分类: C语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

int a[10]

数组名a 就是数组的首地址,

int a[5]={1,2,3,4,5};
int *p1=(int *)(&a+1);
int *p2=(int *)((int)a+1);

p1,p2分别指向了哪里 
那么 printf("%x",p1[-1])会输出什么呢

&a是地址,&a+1就相当于移动一维,所以应该是a[5],p1[-1]应该是a[4];

(int)a是把地址强制转化成int型,(int)里的加1就是普通的数值加1,不是移动一个int的位置,就是说p2指向的是a[0]的3个字节和a[1]的一个字节组成的int

一般的情况下a[5]=6,编译器不会报错

*p++ 因为*与++优先级是相等的,但是运算时从右向左结合的,所以*p++等价于*(p++);但是*(p++)与*(++p)是不同的,前者是运算完之后再++,后者是先运算zai++

 

c语言允许把多位数组拆分为一维数组

a[2][3] 可以用一维数组来表示

指针数组与数组指针的区别

int *p[10]是指针数组

int (*p)[10]是数组指针,它指向的是含有10各元素的一维数组

  评论这张
 
阅读(51)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018