C/C++编程笔记:C语言中数组与指针的异同,两大核心知识点分析

C语言的数组和指针一直是两个容易混淆的东西,当初在学习的时候,也许为了经过考试会对指针和数组的一些考点进行突击,可是不少极其细节的东西也许并非那么清楚。本篇侧重点在于分析数组与指针的关系,何时数组能够等同于指针,何时两者不一样。编程

数组的访问

首先经过一张图来描述一下数组的访问过程,下图的字符数组,访问下标为9的的元素数组

须要注意的是若是其余类型的变量,那么偏移量的计算应该是 i*单变量字节数,好比char是一个字节,int是4字节,那么int类型数组计算地址是,应该是加上偏移量 i*4微信

指针的访问

下面是访问指针的例子:函数

符号表里有一个符号p,它的地址为4040学习

运行时,先取4040的内容,即9910。而后在取地址9910的内容,即取到指针所指向的地址的内容。spa

也就是说指针的取值,多了一个提取步骤3d

两者差别特性总结

何时两者能够相互替换

咱们经常把指针和数组混淆,好比如下这种状况,定义为指针,却使用了数组的方式来取值。指针

char *p = "pointertest";blog

c = p[i];v8

定义为指针,可是使用数组的方式来取值。咱们能够结合以上两种方式,来分析这种状况下的取值过程:

1.先根据符号p的地址,取到符号p的值,是一个地址,咱们假设为4040,也就是和上面第二种状况的指针访问同样。

2.接下来就是4040+i,获得新的地址值

3.取新的地址的内容

同理,取偏移地址的时候,须要注意变量类型,好比int类型,就是加上 i*4

如下对于两者可相互替换作一个总结

(1)extern char a[];经过extern声明的数组,不能用指针形式替换

(2)数组定义为 char a[5],不能用指针的形式替换

(3)数组做为函数参数,可使用指针形式替换

(4)在表达式中,好比c = a[i],这种状况也可使用指针形式来替换,由于在表达式中,数组名a被当作指向该数组第一个元素的指针,因此能够和指针相互替换。并且数组下标i能够和指针的偏移量等同起来,a[i]等同于 *(a+i)。


自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一块儿学习成长!

C语言C++编程学习交流圈子,【点击进入微信公众号:C语言编程学习基地

有一些源码和资料分享,欢迎转行也学习编程的伙伴,和你们一块儿交流成长会比本身琢磨更快哦!

相关文章
相关标签/搜索