数组用指针表示_数组指针的用法

数组用指针表示_数组指针的用法数组与指针专题今天我们对数组与指针的知识做一个小结。包括数组、指针数组、数组指针。一维数组与指针在学习数组之前,必须对数组名字代表的含义非常的清楚,数组名代表的数组的首地址,通过这个首地址我们可以对这块内存区域进行访问,因为数组分配空间是按照顺序依次分配的。&a 与 &a+1 之间相

数组与指针专题   今天我们对数组与指针的知识做一个小结。包括数组、指针数组、数组指针。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   一维数组与指针在学习数组之前,必须对数组名字代表的含义非常的清楚,数组名代表的数组的首地址,通过这个首地址我们可以对这块内存区域进行访问,因为数组分配空间是按照顺序依次分配的。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   &a 与 &a+1 之间相差了几个素呢?在回答这个问题之前,我们需要明白几个知识点,我们说数组名a代表着数组的首地址,a[i] 《==》*(a+i) 这个表达式是等价的,a+i 表示的是以内存地址a移动了i个int的地址。我们同样还看到了另外一个有趣的现象,a,&a[0][0],&a这三个素打印的地址是相同的。但是他们三个的意义却是有很大的不同。a代表数组的首地址,在其是一维数组时,与&a[0][0]代表的意义一样,首地址。&a代表的是把数组看成一个整体取地址&a + 1 则表示数组作为一个整体移动了一个素(数组),其实相当于移动了5*4 = 20个字节&a+1 – &a = 0xbfd5f6b8 – 0xbfd5f6a4 (注:当然不同类型的地址是不能相减的)以下是利用数组名,指针变量来访问数组素。本地都是数组的首地址,想象一下首地址的意义。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   运行结果如下:
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   p[i] 表示的意义就是运算式 *(p + i), 同样的a[i] <==> *(a+i)如果p = a时, 那么这四个表达式的值都是相等的。二、二维数组与指针2.1 二维数组的各个地址的含义在二维数组中,我们又有哪些需要注意的呢?数组名代表了数组的首地址,也代表了第一行的首地址。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   执行结果:
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   咱们通过上面的程序,可以知道的是a代表了数组的首地址,代表了第一行的首地址。记住了它这里与&a[0][0]值相等但是并没有代表他的含义。我们可以把二维数组这么认为,把每一行当成一个整体作为一个素,所以有咱们的a[0],a[1]正如我们初始化里面的一样,把每行当成一个数组用{}。分析完上述,之后我们来开始接着往下分析,它和指针之间的碰撞,看看会发生哪些意想不到的化学反应呢,记住地址是本质。2.2 指针数组看到指针和数组的结合,不要畏惧,我们首先来分析它的字面的意思,指针数组注意定语是数组,也就是说数组时核心,那么我们想想数组的话就会有素的,那么比较特殊,它的素不是我们前面学的整形、字符型。而是指针类型。也就是说素是一个一个的地址。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   执行结果:
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   以上三种方式情况都能访问到我们的二维数组。那么我们来一一分析一下:首先我们定义的指针数组,那么数组的素只能是指针,同时我们上面进行了分析,将二维数组的每行看成是一个一维数组,那么a[0],a[1]就是每行的首地址。那么我们初始化指针数组就顺理成章了。此时数组a里面就有两个素a[0]和a[1]。p[0] == a[0] p[1] == a[1] ,知道每行的首地址移动j个素,实际偏移的地址量sizeof(类型)* j个字节。那么知道了地址取出这个单个的值,加*就ok了我们知道带有中括号的表达式可以这么写p[i] == *(p + i)2.3 数组指针上面我们分析了指针数组,现在来分析数组指针。同样我们来看定语是指针,那么作为指针就应该有指向了,只不过它指向的是一个数组,一个什么样的数组呢,它指向一个包含N个素的一维数组。原型如:int(*p)[N];
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   执行结果:
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   大家要注意的是类型的是为指针变量赋值的时候,类型要匹配二维数组a代表着数组名,同时也是第一行的首地址,我们说把每个一维数组当成一个整体,那么我们的二维数组就成了一个一维数组了,一维数组怎么取素的呢?a[0],a[1]…a[i] 就是这个二维数组中每一个一维数组的值,但是切记它也只是一个地址。所以取整个数组的素的值就有了上面的表述方式了。*(a[i] + j),*(*(a+i)+j), i表示行指针a,移动的行数,取出它的值是一行的首地址,在移动j表示在此行的基础上移动的列数,终得到的是这个数组第i行j列的地址了,取值的话就加上*就ok了。咱们接着来深入分析,同样的给p变量赋值,咱们来看看还有没有别的方式呢,数组指针,本质是一个指针,指向了一个数组,那么它里面存放的是一个地址。你可以把理解为一个二级指针。这样也是可以的。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   2.4 数组指针数组按照咱们的上面来分析,定语是数组,那么数组就有素,修饰语就是数组指针,那么我们可以这么认为它的本质是一个数组,数组包含了若干个素,每个素都是一个数组指针,也就是每一个素是一个指针,指向了一个数组。好吧,比较拗口。依据咱们分析的意思咱们就可以写出它的表达式了。
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   执行结果如下:
数组用指针表示_数组指针的用法
数组用指针表示_数组指针的用法   结束语:关于数组与指针的结合还有很多不同种的形式,方法就是找到咱们的后的定语,和前面的修饰语,一步一步的分析,分析时刻谨记地址是本质是关键。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/73199.html

(0)
上一篇 2024年 8月 5日
下一篇 2024年 8月 5日

相关推荐

关注微信