指针数组与数组指针
来源:互联网 发布:mac os ps 破解版 编辑:程序博客网 时间:2024/06/03 17:34
指针数组与数组指针
首先我是个渣渣,本文仅限参考
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.
分析完毕,我只了解这些
- 指针:指针与数组
- 指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组与数组指针
- 指针数组 与数组指针
- 指针数组与数组指针
- 数组指针与指针数组
- 指针数组与数组指针
- 指针数组与数组指针
- 关于屏幕适配
- iOS~runtime理解
- iOS_时间戳与时间间的互相转化
- 指针与数组
- Bootstrap(二) 表单
- 指针数组与数组指针
- 通配符(1)
- css样式表<style>元素里面的*符号代表声明意思?
- 多线程下HashMap的死循环问题
- 华工校赛 F. Bracket Sequence
- 【Spring】Spring MVC原理及配置详解
- IOS 读二进制数据文件
- 剑指offer 两个链表的第一个公共结点
- ubuntu14.04中改变文件夹的图标