指针数组与数组指针
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.分析完毕,我只了解这些
相关文章推荐
- C指针陷阱
- cocos2d-x Tiled地图坐标转换
- 思科路由器学习资料
- iOS_时间戳与时间间的互相转化
- 像素翻转
- Java序列化id
- iOS~runtime理解
- 关于屏幕适配
- 在Ubuntu 64位机器上执行arm-linux-gcc命令提示无法加载库,no such file or directory
- c#怎么把byte转化成int
- Spring定时器--时间设置规则(转载)
- list 获取应用icon
- 常用业务对照表
- ELF格式详解
- 漫谈程序员系列:咦,你也在混日子啊
- oracle 查询十分钟之前的数据
- [转]CocoaPods 详解之—-更新篇
- 前端收藏夹
- Lodop 水印设置代码
- 自定义挤压头部的listview