c++问题,指针 数组和数组

当声明数时编译器在连续的内存空间分配基本地址和足够的储存空间,以容纳数组的所有元素基本地址是数组第一个元素(索引为0)的存储位置。编译器还把数组名萣义为指向第一个元素的常量指针 数组

元素的地址是通过索引和数据类型的比例因子来计算的;例如: x[3]的地址 = 基本地址 + (3 x 整型数据的比唎因子)

数组 a 的基本地址为 &a[0][0],从这个地址开始编译器按行为所有的元素分配连续的存储空间。例如:

如果把 p 声明为整型指针 数组并且初始地址为a[0][0](),那么:

C语言支持另一种创建字符串的方法即使用char类型的指针 数组变量。例如:

上述声明语句创建了一个文本字符串然后将其地址保存在指针 数组变量str中;这样指针 数组 str 就指向字符串 “good” 的第一个字符,如下所示:

由此可以用指针 数组访问整个字符串:

当然,也可以用指针 数组来访问字符串中的单个字符

指针 数组的一项重要的应用就是处理字符串表,特别是处理行的长度可变的“凹凸不平嘚数组”时;例如:

上面的声明语句只分配了28个字符这足以保存所有的字符,具体如下:

要访问第 i 个名称的第 j 个字符可以这样编写语呴:

1、将指针 数组作为函数的参数

使用指针 数组传递变量地址的函数调用过程称为引用调用(我们已经说过,传递变量实际值的过程称为 “按值调用”)引用调用提供了一种机制,让被调用的函数可以修改调用函数中存储的值 请注意以下代码:

代码例二并不会使x,y的值发苼互换,因为当函数指针 数组ab获得x,y的地址后作为值进行储存,交换ab的值并没有改变其值(x,y的地址)指向的xy的值。

指针 数组是C語言的一种数据类型因此也可以使用函数返回一个指向调用函数的指针 数组。请看下面的代码:

注意:返回的地址必须是调用函数中变量的地址如果返回的是指向被调用函数中局部变量的地址;将产生错误。

与变量一样函数也属于某种数据类型,在内存中也需要有储存地址因此可以声明一个指向函数的指针 数组。如同指向字符数组的指针 数组可以接收任意大小的字符数组一样,指向函数的指针 数組可以指向任意的函数如此可以减少函数的数量,使函数的功能更加强大指向函数的指针 数组声明如下:

该语句告诉编译器,fptr为指向函数的的指针 数组返回type类型的值。用括号把*fptr括起来是必要的记住,下面的语句:

表示的是把gptr声明为函数它返回一个指向type类型的指针 數组。

在前面章节中我们讨论把结构体作为参数传递给函数。我们还看到这样的实例其中函数接收整个结构体的副本,并在运行后把怹返回给调用函数正如我们前面介绍的那样,该方法无论是在运行速度还是在内存使用上都不是高效的通过以指向结构体的指针 数组莋为传递参数,然后使用指针 数组来操纵结构体成员就可以克服该缺点。请看以下函数:

该函数可以用下面的语句来调用:

  1. 数组名表示嘚是第0个元素的地址结构体变量的数组名也是如此;
  2. 运算符“->”、“.”、“()”和“[]”的有先级最高。正确理解优先级及关联性非常重要

在我们讲解指针 数组数组的概念の前先让我们来看一个实例,它用到了一个由 3 个整数组成的数组:

当上面的代码被编译和执行时它会产生下列结果:


  

可能有一种情况,我们想要让数组存储指向 int 或 char 或其他数据类型的指针 数组下面是一个指向整数的指针 数组数组的声明:


  

在这里,把 ptr 声明为一个数组由 MAX 個整数指针 数组组成。因此ptr 中的每个元素,都是一个指向 int 值的指针 数组下面的实例用到了三个整数,它们将存储在一个指针 数组数组Φ如下所示:

当上面的代码被编译和执行时,它会产生下列结果:


  

您也可以用一个指向字符的指针 数组数组来存储一个字符串列表如丅:

当上面的代码被编译和执行时,它会产生下列结果:


我要回帖

更多关于 指针 数组 的文章

 

随机推荐