(迷惑标题大赏)数组就是指针?
作者:小Bob来啦
数组在处理大量数据时发挥着重要的作用,这也无可避免的导致我们在写程序时要用到大量的数组。
数组我们之前也已经介绍过,而单单一个数组学起来是很简单的,如下:
今天我们要讲的是关于指针和数组简单入门。
前面粗略讲过指针的一些知识点:(这里补充一点就是在输出地址时用的是%p.)
指针与数组(入门)
计算机作为程序的载体,而程序的实现依靠于程序员传达的指令(计算机硬件指令是非常依赖于地址的),那么指针在某种程度上就是把程序员传达的指令以一种更接近机器的的方式表达,进而使得用指针的程序更有效率。
学过数组的都知道数组有下标,那个其实也算得上是个小小的“地址”了。也可以理解为数组就是在变相的使用指针(而且使用指针表示法和数组表示法效率是一样的)。
多理解理解就懂啦
比如定义一个family[6]的数组,那么family就等于&family[0]。而family和&family[0]都能表示为数组首元素的内存地址,简单来说就是数组名就是该数组首元素的地址。
family==&family[0];//&是地址运算
family和&family[0]都是常量,并且在程序运行中不会改变。但是可以把它们赋值给指针变量(即自己定义的指针变量),然后再去修改指针变量的值进而达到改变常量。
不知大家有木有试过给指针加加减减,并且输出指针的地址,而当定义的指针类型不相同时指针地址的变化也会有所不同,这就要说到地址是按字节编址,int类型占4个字节,数据类型占内存的位数实际上与操作系统的位数和编译器(不同编译器支持的位数可能有所不同)都有关。而指针+1增加的则是一个存储单元,对于数组+1就是下一个元素的地址,而不是按字节来算的。
所以大家在定义数组时一定要声明指向对象的类型,否则指针不知道要存储对象需要多少字节。
简述:
以前面定义的数组family为例,我们用family+1也可以表示为&family[1],它们具有相同的地址。注意这里不是它们的值,我们知道数组的值可以表示为family[1],那么和family[1]相同的指针表示法则为*(family+1)。
*(family+1)也可以简单理解为先到family的首地址,然后再移动1个单元。
最后我们得注意括号的问题,*(family+1)和*family+1是不同的,指针弄懂的应该很容易看出来,*family+1是相当于(*family)+1的,是在family的第一个元素上加1,而*(family+1)表示的是第二个元素的值。
To:间接运算符(*)的优先级高于+。
最后的话:学到指针这一节的童鞋需要多多理解哦,理解之后再刷题会事半功倍。
① JDK动态代理只提供接口的代理,不支持类的代理,要求被代理类实现接口。JDK动态代理的核心是InvocationHandler接口和Proxy类,在获...
发现它是部分C++中支持的一个几乎万能的头文件,包含所有的可用到的C++库函数,如
return 0 代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值...
C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的。bool类型有只有两个值:true =1 、fals...
JavaSE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。
Spring Boot对Spring平台和第三方库进行了整合,可创建可以运行的、独立的、生产级的基于Spring的应用程序。(大多数Spring Boot应用程...
在开始使用Eclipse的时候,会发现一个问题,那就是如何打开一个现有的Eclipse工程,开始在菜单中找了好久也没找到。 其实,Eclipse生成的结果不像V...
在Settings打开Android SDK,右侧选择SDK Tools下载Google USB Driver,安装成功之后点击右下角的appl...
什么时候会用到 JShell 工具呢,当我们编写的代码非常少的时候,而又不愿意编写类,main方法,也不愿意去编译和运 行,这个时候可以使用JShell工具。