您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-23 18:06 274 查看
// 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值要求与二维数组的列一致
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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: