浅谈指针相关问题

一,指针的概念
1.指针就是个变量,用来存放地址,地址唯一标识一块内存空间。
2.指针的大小是固定的:4个或8个字节(32位平台/64位平台)。
3.指针是有类型的,指针的类型决定了指针的±步长,指针的解引用操作的时候的权限。
4.指针的运算:c语言与c++语言规定,一个指针变量加/减一个整数是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数相加或相减。如:p+i代表这样的地址计算,p+id,其中d为p所指向的变量单元所占用的字节数。
二,一级指针
通常用作,函数的输入参数,因为一级指针作为函数参数,在调用的时候,实参和形参是不同的内存空间,只是,这个内存空间存放的指针指向的是同一块地址,所以形参在函数执行中可以访问实参指向的内存空间,但是形参的指向的改变并不能影响实参。总结一句话,“一级指针做函数参数,在函数内做形参做重新指向并不会影响实参的指向”。
在应用时需要注意:1.不要在函数中,改变形参的指向来达到改变实参指向的效果,因为形参和实参只是两个指向同一空间的不同指针而已。2.因为形参和实参指向的是同一空间,所以可以在形参中改变其指向空间的值,如此实参指向的空间地址也发生改变。
三.二级指针
首先任何值都有地址,一级指针的值虽然是地址,但这个地址作为一个值也需要空间来存放,是空间就有地址,这就是存放地址这一值的空间所具有的地址,二级指针就是为了获取这个地址。
一级指针所关联的是一个地址名下空间里的数据,这个数据可以是任意类型并做任意用途,但二级指针所关联的数据只有一个类型一个用途,就是地址,指针就是两个用途提供目标的读取或改写,那么二级指针就是为了提供对于内存地址的读取或改写。
指针的表现形式是地址,核心是指向关系指针,运算符“
”的作用是指向关系访问所指向的对象。如果存在A指向B的指向关系,则A是B的地址,“A”表示通过这个指向关系间接访问B,如果B的值也是一个指针,它指向C,则B是C的地址,“B”表示间接访问C如果C是整型,实型或者结构体等类型的变量或者是存放这些类型的数据的数组元素,则B(即C的地址)是普通的指针,称为一级指针,用于存放一级指针的变量称为一级指针变量。
三.数组和指针
指针数组,顾名思义指针数组是数组,里面所存放的元素为指针。例如:int* arr[10]为整型指针的数组,char* arr[4]为一级字符指针的数组,char**arr[5]为二级字符指针的数组。
数组指针,数组指针是指针,是能够指向数组的指针。例如:int (p)[10];p先和“”结合,说明p是一个指针变量,然后指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。(【】的优先级高于*,所以必须加上()来保证p先和*结合)。
数组类型由元素类型和元素个数共同决定,数组传参之时,数组降维会降维成指向其内部元素类型的指针。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值