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

来源:互联网 发布:网络爬虫爬取什么赚钱 编辑:程序博客网 时间:2024/05/16 19:13
// 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");}

0 0