// 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");
}
C++指针数组与数组指针的比较
最新推荐文章于 2024-08-13 18:39:42 发布