对于指针的理解

目录

  什么是指针/地址?

  指针的常见类型:

  常量指针:

  指针变量的定义方法:

  指针所需占用的空间

  指针类型的意义:

  地址有关常识

  指针与数组


  什么是指针/地址?

                             内存被划为很多格子(内存单元)

【】0                    每个格子都有一个编号

【】1                    32位指的是32根地址线—物理线-通电后有正负电-1/0

【】2                    把从全零到全一的所有可能—2^32作为编号 (即需要32个二进制位)

【】3                    这种编号就被称为地址

【】4                    一个地址(内存单元)大小在位数不同的计算机中不同

                             64中是8个字节(64bit)

                             32位中是4个字节(32bit)

                 一个变量的(内存)地址就被称为该变量的“指针”。即指针就是地址

                指针变量就是存放内存地址的变量


  指针的常见类型:

        1、一级指针    

                        一级指针变量可以存放与自己定义类型相同的的参数的地址

        2、二级指针

                        二级指针变量可以存放对应类型的一级指针的地址

        3、数组指针

                        数组指针变量可以存放与定义类型相同的数组的地址

        4、函数指针

                        函数指针变量可以存放与定义类型相同的函数的指针

常见指针实例:

int a;

int arr[5];

int Add(inx,iny)

{return x+y;}

int* p=&a;                                    //这里的p就是一级指针变量

int**pa=&p;                               //这里的pa就是二级指针变量 

int (*parr)[5]=&arr                       //这里的parr就是数组指针

int(*pa)(int,int)=&Add                 //这里的pa就是函数指针

函数指针详细可以参考                  函数指针讲解


常量指针:

char* ps="hellow";

其中的hellow被称为常量字符串。

常量字符串不能更改,在内存中只占一个空间

即在指针赋的常量在内存中只有一份

重复定义许多指针也不会再开辟空间

严格定义时应为

const char* ps="hellow";


指针变量的定义方法:

int*pa=&a

*说明pa是指针

int说明pa的执行对象是int型

int说明指针在地址中取数据时是按int大小去取的

同理int可替换为其他的类型

&a指的是取出a的地址

&是取地址号

*pa=20

而这里的*为解引用操作符,*pa就是通过pa里的地址,找到a



指针所需占用的空间

指针需要多大空间取决于地址的存储需要多大空间

32位 需要32bit即4byte所以32位中指针需要4字节

64位 需要64bit即8字节所以64位中指针需要8字节


指针类型的意义:

1、指针类型决定了:指针解引用的权限有多大

2、指针类型决定了:指针走一步能走多远

对上的解释:

不同指针类型的操作权限不同

例如char*p虽然可以装下int型变量的地址但是在改变其值的时候操作权限只能改变其前1个字节的值而对后面地址无法更改


地址有关常识

1、局部变量是放在栈区上的

栈区内存的使用习惯是:

先用高地址空间,再用低地址空间

2、数组随着下标的增长地址是由低到高变化的

所以如果数组越界,可能会作用到其他的变量上改变其他变量的值


指针与数组

1、数组名就是数组首元素的首地址。

2 、  arr[2]<=>2[arr]

     *(arr+2)<=>*(2+arr)

        arr[2]<=>2[arr]

3、[]是一个操作符,2和arr是两个操作数.

4、编译器在处理时最后都是把

arr[2]转换为*(arr+2)进行运算的.

5、数组允许读取超过数组后一位的地址的比较

但不允许比自己数组前面的地址 .


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值