您的位置:首页 > 其它

指针数组与数组指针

2016-04-27 10:13 225 查看
指针数组与数组指针首先我是个渣渣,本文仅限参考1、首先先分清指针数组和数组指针的区别:指针数组;首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在32位系统下永远占4个字节,至于它指向的数组占几个字节,我们并不知道。它是“指向数组的指针”的简称。2、下面来说明指针数组与数组指针的表达:那么下面两种表达方式哪个是数组指针哪个是指针数组呢?1) int *p1[10]2 ) int (*p2)[10]在这里我们知道“[]”的优先级比“*”高,p1先与[]结合构成一个数组,构成一个数组,再用int*来修饰,所以这个数组中有十个int类型的指针,叫做指针数组。对于p2就更好理解了,()的优先级高,int修饰的是数组内容,这种类型叫做数组指针。3、下面再来讨论a和&a的区别先看下面的一段代码;
int main()
{
char a[5]={'A','B','C','D'};
char(*P3)[5]=&a;
char(*p4)[5]=a;
return 0;
}
这里&a表示的是整个数组的首地址,a表示首元素的首地址,虽然表示的值相同,但p4左右两边的数据类型不一样,编译器会给出警告,虽然运行并没有问题,但是要少用。4、下面来介绍地址的强制转换
struct Test{int Num;char*pcName;short sDate;char cha[2];short sBa[4];}*p;
假设p的值是0x100000,下面的表达式的值分别是多少呢?p+0x1=0x___?(unsigned long) p+0x1=0x___?(unsigned int*)p+0x1=0x___?p+0x1的值为0x100000+sizeof(Test)*0x1.至于此结构体大小为20比特位,所以p+0x1=0x100000+20=0x100014;(unsigned long)强制转化p为无符号长整型整数,所以这里就是加上整数0x1了,所以(unsigned long) p+0x1=0x100000+0x1=0x100001;(unsigned int*)强制转化p为无符号整型指针,所以它的值为0x100000+sizeof(unsigned int)*0x1=0x100000+0x4=0x100004.分析完毕,我只了解这些
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: