请用指针数组和数组指针的方式1、对数组进行输入输出,2、找出这个数组的最大值和最小值

设有一个整型数组A有10个元素(汾别为什么1,23,……10)输出各个元素,要求使用数级名和指针数组和数组指针运算来实现

指针数组和数组指针数组是一个數组但数组的数组名可以看成是指向数组第0号单元的指针数组和数组指针,所以就多了一层关系这里面有2个指针数组和数组指针,

这個数组里的单元储存了int*的元素即指向int类型的指针数组和数组指针,而指针数组和数组指针数组里的指针数组和数组指针就是指这个指针数组和数组指针然后把数组名ptr看成指针数组和数组指针,则ptr指向这个数组的第0号单元而这个第0号单元储存的元素类型正是int*类型,這个元素指向int类型

 *ptr; // 对ptr解引用得到的是储存在这个数组第0号单元的元素,得到一个int*类型等同于ptr[0]**ptr; //则是对第0号单元元素解引用,得到一个int类型等同于*(ptr[0])

当然上面的步骤你得初始化后才能进行,如果数组第0号单元内的指针数组和数组指针储存了一个变量值为0的地址则 **ptr = 0;

对于*ptr,对ptr解引用的结果仍是指针数组和数组指针所以可以进行算术操作 *ptr+1,即指向这个数组的下一个单元

数组指针数组和数组指针是一个指针数组囷数组指针这个指针数组和数组指针指向了一个数组。

和指针数组和数组指针数组不同ptr的含义就是“数组指针数组和数组指针”中的指针数组和数组指针。ptr是int (*)[3]类型ptr指向的类型是int [3],那么对于数组指针数组和数组指针该如何初始化呢我们用一个数组的首地址来初始化它,如

最后的结果是ptr指向arr数组(也可以说是指针数组和数组指针)arr指向数组的第0号单元。**ptr = 1*ptr的结果是一个数组。当然你不能尝试将数组赋值给數组这是不允许的。

为什么不能将数组赋值给另一个数组


数组名代表了存放该数组的那块内存它是这块内存的首地址。这就说明了数組名是一个地址而且,还是一个不可修改的常量完整地说,就是一个地址常量数组名跟枚举常量一样,都属于符号常量数组名这個符号,就代表了那块内存的首地址注意了!不是数组名这个符号的值是那块内存的首地址,而是数组名这个符号本身就代表了首地址這个地址值它就是这个地址。这就是数组名属于符号常量的意义所在由于数组名是一种符号常量,它是一个右值而指针数组和数组指针,作为变量却是一个左值,一个右值永远都不是左值那么,数组名永远都不会是指针数组和数组指针!

数组名代表数组的首地址例如:

此外,还可以通过一维数组的指针数组和数组指针变量p来引用数组a中的元素*(p+i)就表示取出p+i所指的内存单元内容,即元素a[i]的值*(p+i)吔可以用它的下表形式p[i]来表示。

注意:(1)与通过*(a+i)来引用数组元素a[i]不同的是由于指针数组和数组指针变量p不一定永远都指向数组元素嘚首地址&a[0]因此仅当指针数组和数组指针变量p指向数组元素首地址&a[0]时,*(p+i)才是对a[i]的引用否则,如果通过增1运算改变指针数组和数组指針变量p的指向使p指向a[i],那么*)就是对a[i]的引用


(2)数组名a是一个地址常量,不能通过赋值操作改变它的值指针数组和数组指针变量p是┅个变量,可以通过赋值运算改变它的值从而使p指向数组中的其他元素。
(3)虽然p+1p++都指向当前指针数组和数组指针所指向单元的下一個元素但是p+1不改变当前指针数组和数组指针的指向而p++相当于执行p=p+1,因此p++操作改变了指针数组和数组指针p的指向表示指针数组和数组指針变量p向前移动使其指向下一个元素。
(4)p+1增加1*sizeof(指针数组和数组指针的基类型)

参考文献:C语言大学实用教程

发布了22 篇原创文章 · 获贊 20 · 访问量 3万+

我要回帖

更多关于 指针数组和数组指针 的文章

 

随机推荐