指针理解------一级指针,二级指针,指针和数组,指针数组

一级指针

1.  int *p  这里定义了一个指针变量p,p里存储的内存地址处的内存称为p所指向的内存,p里的任何数据都当做地址处理。

指针就是变量,用来存放地址的变量。指针的大小在32位平台是4个字节,在64位平台是8个字节。

2.指针的定义方式是: type  * ,type只是说明指针所指向的内存里存储的数据类型。指针类型的意义:

  • 指针+-整数:+-的大小取决于其所指向的类型。如char *p;p+1则代表加一个字节,int *p;p+1则是加4个字节。
  • 指针的解引用: 指针的类型决定了对指针解引用的时候有多大的权限(能操作几个字节)。 比如: char* 的指针解引用就
    只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。
  • 指针运算

二级指针

char **p;定义了一个二级指针变量 p。p 是一个指针变量,毫无疑问在 32 位系统下占 4 个 byte。它与一级指针不同的是,一级指针保存的是数据的地址,二级指针保存的是一级指针的地址。画图表示如下;

 

指针和数组

指针和数组没有关系!!!

指针就是指针,32位系统下永远占4个字节,其值为某一个内存的地址。

数组就是数组,是一组具有相同数据类型元素的集合。其大小与元素的个数和类型有关。

下面我们就详细讨论讨论它们之间似是而非的一些特点。例如,函数内部有如下定义:
A),char*p = “abcdef”;
B),chara[]= “123456”;

  • 以指针的形式访问指针:*(p+4),先取出 p 里存储的地址值,然后取出加上 4 个字符的偏移量地址上的值。
  • 以下标的形式访问指针:p[4], 编译器总是把以下标的形式的操作解析为以指针的形式的操作。p[4]这个操作会被解析成:先取出 p 里存储的地址值,然后加上中括号中 4 个元素的偏移量,计算出新的地址,然后从新的地址中取出值。
  • 以指针的形式访问数组:*(a+4)。a 这时候代表的是数组首元素的首地址,然后加上 4 个字符的偏移量,得到新的地址 ,然后取出地址上的值。
  • 以下标的形式访问数组:a[4]。编译器总是把以下标的形式的操作解析为以指针的形式的操作。a[4]这个操作会被解析成:a 作为数组首元素的首地址,然后加上中括号中 4 个元素的偏移量,计算出新的地址,然后从新的地址中取出值。

由上面的分析,我们可以看到,指针和数组根本就是两个完全不一样的东西。只是它们都可以“以指针形式”或“以下标形式”进行访问。一个是完全的匿名访问,一个是典型的具名+匿名访问。偏移量的单位是元素的个数偏移量的单位是元素的个数而不是 byte 数,在计算新地址时千万别弄错了。

指针数组 

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。

int *p1[10];p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,int*修饰的是数组的内容,即数组的每个元素。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值