多维数组与指针

用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素,但在概念和使用上,多维数组的指针比一维数组的指针要复杂一些。可以认为二维数组是数组的数组。

例:定义:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

则二维数组a是由3个一维数组所组成的,设二维数组的首行首地址为2000,

表示形式 含义 地址
a 二维数组名,指向一维数组a0,即0行首地址 2000
a[0],*[a+0],*a 0行0列元素地址 2000
a[1]+2,*[a+1]+2,&a[1][2] 1行2列元素地址 2024
*(a[1]+2),*(*(a+1)+2),a[1][2] 1行2列元素的值 元素值为13

把二维数组分解为一维数组a[0],a[1],a[2]之后,设p为指向二维数组的指针变量。可定义为:int(*p)[4]。

它表示p是一个指针变量,它指向包含四个元素的指针数组。

p+i则指向一维数组a[i]。

二维数组指针变量说明的一般形式为:类型说明符(*指针变量名)【长度】

例:用指针变量输出二维数组元素的值。

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    int i,j;
    int (*p)[4];
    p=a;
    for(i=0;i<=2;i++)
    {
        for(j=0;j<=3;j++)
        {
            printf("%d\n",*(*(a+i))+j);
        }

    }
        
}

例:通过输入指定行数和列数打印出二维数组对应的元素值。

#include <stdafx.h>
#include<stdio.h>

void main()
{
    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    int i,j;
    int (*p)[4];
    p=a;
    printf("i=");
    scanf("%d",&i);
    while(i>2||i<0)
    {
        printf("i=");
        scanf("%d",&i);
    }
    printf("j=");
    scanf("%d",&j);
    while(j>3||j<0)
    {
        printf("j=");
        scanf("%d",&j);
    }
    printf("%d",*(*(a+i)+j));
}

 

posted @ 2019-02-09 00:48  巫师笔记  阅读(771)  评论(0编辑  收藏  举报