指针进阶1

大家好,今天小魏来发表自己对指针的认识啦,如有错误,请大佬斧正!

我们通常所说的指针其实就是指针变量,它是一个变量,用来存放地址,内存会划分为一个个小的内存单元,每个内存单元都有自己的编号,这个编号就是这个内存单元的地址,用指针来存放。

我们用图就更清楚了

因此,内存编号=地址=指针

当要存储指针或者地址时就用指针变量来存储

指针大小与其类型无关,主要看编译器所处的环境,如我们所使用的的编译器VS2019的x86环境,也就是我们所说的32位平台,就是4个字节的大小,而在64位平台上就是8个字节。 

指针是有类型的,而它的类型决定了这个指针+1或-1跳过的元素数,比如整形指针+1或-1跳过4个元素,而字符型指针跳过1个

指针也是可以进行运算的

可以进行指针+-整数

可以进行指针-指针(不能进行指针+指针)

可以进行指针的关系运算,比如比大小

 这个不可以的,指针大小为4个字节,而这个字符串有7个字节,这是错误的做法

大家猜一猜这段代码的运行结果是啥呢,反正我第一次做这个题的时候做错了,我认为这两个都相等,其实不然

我们来分析一下  上图

 下面让我们来区分几个概念

1.指针数组

顾名思义,指针数组是数组,是用来存放指针的数组,举个例子

 

这个arr是int*类型的

 

这里的arr1,arr2,arr3代表的是数组首元素地址,用 pc这个指针来存放地址,这也是一个指针数组,存放的三个元素。

注意,一般来说数组名基本都代表数组首元素地址。但有两个特例,第一个是sizeof(数组名),它代表的是整个数组。第二个是&arr,代表取出的是整个数组的地址。

 

这样就可以访问到这个数组了,这里就相当于模拟了一个二维数组,parr[3]当中就存放了第一行第二行第三行的地址,二维数组中一行代表一个元素,然后再利用+j来访问具体的元素,要注意二维数组在内存中是连续存放的。

2.数组指针

数组指针是指针。

例如int(*p)arr[10]  这就是一个数组指针。在规定中[]的级别比*高,所以要打括号

把名字去了就是其类型,这个的类型为int  (*)[10]

例  int(*p)arr[10]=&a

p是一个指针,指向数组arr[10],所以p叫数组指针

char* arr[5]

char*    (*p)=&arr

要存放地址,肯定要用指针,而且这个数组是char*类型的,所以就要这样表示

一维数组传参时,调用函数形参可用数组,也可用指针

二位数组也是如此

预知后事如何,且听下回分解

 

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值