指针

一级指针

  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修饰的是数组的内容,即数组的每个元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值