C语言数组指针(指向数组的指针)

注意:数组指针的定义,与指针数组的区别

转载:http://c.biancheng.net/cpp/biancheng/view/162.html

指向多维数组元素的指针变量


① 指向数组元素的指针变量
【例6.7】输出二维数组各元素的值。这里采用的方法是用基类型为整型的指针变量先后指向各元素,逐个输出它们的值。

#include <iostream>
using namespace std;
int main( )
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int *p;                              //p是基类型为整型的指针变量
    for(p=a[0];p<a[0]+12;p++)
        cout<<*p<<" ";
    cout<<endl;
    return 0;
}

运行结果如下:
1 3 5 7 9 11 13 15 17 19 21 23

关于指向数组元素的指针变量的几点说明:

  • p是指向整型数据的指针变量,在for语句中对p赋初值a[0],也可以写成“p=&a[0][0]”。
  • 循环结束的条件是“p<a[0]+12”,只要满足p<a[0]+12,就继续执行循环体。
  • 执行“cout<<*p;”输出p当前所指的列元素的值,然后执行p++,使p指向下一个列元素。


②指向由m个元素组成的一维数组的指针变量
可以定义一个指针变量,它不是指向一个整型元素,而是指向一个包含m个元素的一维数组。这时,如果指针变量p先指向a[0](即p=&a[0]),则p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,见图6.17。


图6.17


【例6.8】输出二维数组任一行任一列元素的值。

#include <iostream>
using namespace std;
int main( )
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int (*p)[4],i,j;
    cin>>i>>j;
    p=a;
    cout<<*(*(p+i)+j)<<endl;
    return 0;
}

运行情况如下:
2 3↙
23

由于执行了“p=a”,使p指向a[0]。因此p+2是二维数组a中序号为2的行的起始地址(由于p是指向一维数组的指针变量,因此p加1,就指向下一个一维数组),见图6.18。*(p+2)+3是a数组2行3列元素地址。*(*(p+2)+3)是a[2][3]的值。


图6.18


3) 用指向数组的指针作函数参数
一维数组名可以作为函数参数传递,多维数组名也可作函数参数传递。

【例6.9】输出二维数组各元素的值。题目与例6.7相同,但本题用一个函数实现输出,用多维数组名作函数参数。

#include <iostream>
using namespace std;
int main( )
{
    void output(int (*p)[4]);  //函数声明 
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    output(a);  //多维数组名作函数参数
    return 0;
}
void output(int (*p)[4])  //形参是指向一维数组的指针变量
{
    int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<4;j++)
            cout<<*(*(p+i)+j)<<" ";
    cout<<endl;
}

  

运行情况如下:
1 3 5 7 9 11 13 15 17 19 21 23

原文地址:https://www.cnblogs.com/panlangen/p/7989520.html