数组在处理大量数据时发挥着重要的作用,这也无可避免的导致我们在写程序时要用到大量的数组。
数组我们之前也已经介绍过,而单单一个数组学起来是很简单的,如下:
今天我们要讲的是关于指针和数组简单入门。
前面粗略讲过指针的一些知识点:(这里补充一点就是在输出地址时用的是%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:间接运算符(*)的优先级高于+。
最后的话:学到指针这一节的童鞋需要多多理解哦,理解之后再刷题会事半功倍。