Chinaunix首页 | 论坛 | 博客
  • 博客访问: 718429
  • 博文数量: 161
  • 博客积分: 2998
  • 博客等级: 少校
  • 技术积分: 1697
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-28 09:39
文章分类

全部博文(161)

文章存档

2012年(6)

2011年(120)

2010年(35)

分类: LINUX

2011-05-05 18:57:06

char a[]="123456";
char *p = "abcdef"
*(p 4):先取出p里面存储的地址值,然后加4个sizeof(p)的偏移量
P[4]和A[4]都是把其解析为指针形式的操作。
*(a 4):a代表数组首元素的的首地址,加上4字符偏移量,然后取出其地址上的值
a与&a对于数组而言
a是数组首元素的首地址
&a是数组的首地址
&a 1:为去数组a的首地址,再加上sizeof(a)[整个a数组的大小]的值,也就是下一个数组的首地址
*(a 1):a与&a的值一样,但意思不一样,a是数组首元素的首地址,也就是a[0]的首地址,&a是数组的首地址,a 1是数组下一个元素的首地址,即是a[1]的首地址,&a 1是下一个数组的首地址


指针:

存储的内容:保存数据的地址,任何存入的指针变量p的数据都会被当做地址来处理,p本身的地址由编译器另外存储,存储在哪,我们并不知道。

访问数据的方式:间接访问数据,首先取得指针变量p的内容,把它作为地址,然后从这个地址提取数据或向这个地址写入数据。指针可以指针的现实访问*(p i)也可以下标的形式访问p[i],但本质都是先提取p的内容然后加上i*sizeof(类型)字节作为数据的真实地址。

常用于动态数据结构,通过malloc和free来分配删除,通常指向匿名或者具名数据

数组:

存储的内容:保存数据,数组名a代表的是数组的首元素的首地址,而不是数组的首地址,&a才是整个数组的首地址。a本身的地址由编译器另外存储,存储在哪,我们并不知道。

访问数据的方式:直接访问数据,数组名a是整个数组的名字,数组内每个元素没有名字。只能通过“具名 匿名”的方式来访问其中的某一元素,不能把数组当成一个整体来进行读写操作。数组可以指针的形式访问*(a i);也可以以下标的形式访问a[i],但本质都是a所代表的数组首元素的首地址加上i*sizeof(类型)字节作为数据的真正地址。

通常用于存储固定数目且数据类型相同的元素

隐式分配和删除,自身即为数组名;

sizeof(a)是整个数组的大小!

char a[5]={'A','B','C','D','E'};

char (*p3)[5] = &a;//类型一致

char (*p4)[5] = a;//等号两边数据类型不一致,左边类型是指向整个数组的指针,右边是指向当个字符的指针;

 

int a[5][5];

int (*p)[4];

p = a;

&p[4][4] - &a[4][4] = -4;

a[4]表示一维数组a的第五个元素

&a[4][2]表示:&a[0][0] 5*4*sizeof(int) 2*sizeof(int);

&p[4]表示&p[0]+4*4*sizeof(int)

p指向的数组,所以p被初始化为&a[0],所以&p[4][2]表示为&a[0][0]+4*4*sizeof(int)+2*sizeof(int);

所以两者相差四个int类型的元素。

阅读(741) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~