关于指针数组和数组指针的浅谈
来源:互联网 发布:数控车编程培训 编辑:程序博客网 时间:2024/06/12 23:45
在实际的code情况下,非常容易对数组指针和指针数组进行混淆,现对此进行稍微的归纳整理:
我们会经常会见到这样的指针形式:
1)int *a[10];
2) int (*a)[10];
碰到这两个形式,首先会感觉手忙脚乱的,不知道从哪儿入手。
首先说一下优先级:
()>[]>*'
()的优先级最高,[]其次,*的优先级在三者之中最低。
因此,对于1)[]优先级最高,先进行它的计算,所以a是一维数组,其里面的参数类型是int*,也就是说,数组里的每个参数都是int*型,这谓之指针数组。
对于2,先进性()的计算,所以a是一个指针,指向一个整型数组的地址。这个数组的长度是10,因此如果进行a++的计算,其步长为10。这谓之数组指针。
因此,综上所述,数组指针是一个指针变量,只占四个字节,可用于表示二维数组的地址。而指针数组,可以表示多个指针变量,占有很多的存储空间。
再来讨论a和&a的区别:
#include <iostream>using namespace std;int main(){char a[5] = {'A','B','C','D'};char (*p3)[5] = &a;//下行在有些编译器下报错//char (*p4)[5] = a;p3++;char* c = p3[-1];printf("%s\n",p3[-1]);return 0;}
&a:表示数组的首地址。a:表示数组第一个元素的首地址。
上述代码解释:
p3++;//p3的步长是5,使地址前进5个字节。
再来介绍一下指针强制转换出现的一种现象:
先看下面这个例子:
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___?
1)步长为整个结构体的变量,为20个自己,所以答案是0x100014;
2) 将p强制转换,成为一个无符号长整型,直接加1即可。答案为0x100001;
3)将p强制转换为无符号int*,使步长为4个字节,所以答案为0x100004;
- 关于指针数组和数组指针的浅谈
- 浅谈数组和指针
- 浅谈数组和指针
- 浅谈 数组 和指针
- 浅谈数组和指针
- 浅谈数组指针和指针数组
- 关于指针的指针和二维数组
- 关于指针和数组
- 关于指针和数组
- 关于数组和指针
- 关于指针和数组
- 关于指针数组和数组指针
- 关于数组指针和指针数组
- 关于数组指针和指针数组的学习笔记
- 关于指针数组和数组指针的一点心得!
- 关于指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- 指针(2):关于数组指针和指向数组指针的指针及其new
- 关于指针数组、数组指针、及函数指针和指向函数指针数组的指针的一点理解
- IPMI学习(supermicro)
- Ext.NET -- 后台动态添加控件
- 关于hashCode方法的作用
- 配置 yum 源的两种方法
- 黑马程序员学习笔记——泛型的反射
- 关于指针数组和数组指针的浅谈
- Struts
- [BZOJ3171][TJOI2013][最小费用最大流]循环格
- vc如何画圆,并填充颜色
- IP网络层与网络设备之间分组收发原理
- 重新编译 vcl70.bpl
- Centos配置国内yum源
- Overload和Override的区别
- sysfs 之 kobject