C++指针数组与数组指针的比较

// test1.cpp : 定义控制台应用程序的入口点。
最简单的辨别方式就是看函数名前面的指针号"*"有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。

#include "stdafx.h"
#include "iostream"
using namespace std;

void main()
{
    int m[3][5]={14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};

    int (*p)[5];				//数组指针,理解为指向数组的指针,指向一维数组,亦称行指针,每个一维数组有[n]个元素
								//其中n值要求与二维数组的列一致
    int i,j;
    int *q[3];					//指针数组, q是数组,数组元素是指针,3个int指针,记住行首地址即可

    p=m;						//p是指针,可以直接指向二维数组
    printf("数组指针输出元素:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++) 
        {
            printf("%3d ",*(*(p+i)+j));    //注意元素值的取值方式
        }
        printf("\n");
    }
    printf("\n另一种遍历方式:\n");
    for(i=0;i<3;i++,p++)				//p可看成是行指针,取值方式类似*(*(p+i)+j))
    {
        printf("%3d ",**p);				//每一行的第一个元素
        printf("%3d ",*(*p+1));			//每一行的第二个元素
        printf("%3d ",*(*p+2));			//每一行的第三个元素
        printf("%3d ",*(*p+3));			//每一行的第四个元素
		printf("%3d ",*(*p+4));			//每一行的第四个元素
        printf("\n");
    }

   
    printf("\n----------------指针数组输出元素-----------------\n");

    for(i=0;i<3;i++)
        q[i]=m[i];						//q是数组,里面的元素是指针即,元素q[i]是指针。初始化时将每个元素(指针)
										//指向数组a每行元素的首地址即可
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%3d ",q[i][j]);		//q[i][j]可换成*(q[i]+j)
        }
        printf("\n");
    }
    printf("\n--------------第二种遍历方式---------------------:\n");

    q[0]=m[0];							//记住第一行元素的首地址
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%3d ",*(q[0]+5*i+j));//首地址+第i行第j列元素的址,再取值即可
        }
        printf("\n");
    }
    printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值