作为一个c++程序员学习指针是每个程序员的必经之路,也是有许多人遇到指针从入门到放弃的门槛。提到指针就不得不提到数组然而这一块也是非常容易让人混淆的。下面通过两个例子来区别他们:
(1)int *qishou[2];
定义一个有两个元素的指针数组,每个元素都是一个指针变量。侧重于指针变量
#include <stdio.h>
#include <stdlib.h>
int main(void){
int girls[4][3]={{172,158,166},
{168,155,171},
{163,164,165},
{163,164,187}};
int *qishou[2];//定义一个有两个元素的指针数组,每个元素都是一个指针变量
if(girls[0][0] > girls[0][1]){
qishou[0] = &girls[0][0];
qishou[1] = &girls[0][1];
}else {
qishou[0] = &girls[0][1];
qishou[1] = &girls[0][0];
}
for(int i=2;i<12;i++){
if(*qishou[1] >=girls[i/3][i%3]){
continue;
}
//候选者高于第二名旗手候选女兵
//1.//候选者比第一位候选人矮
if(girls[i/3][i%3] <= *qishou[0]){
qishou[1] = &girls[i/3][i%3];
}else{
qishou[1] = qishou[0];
qishou[0] = &girls[i/3][i%3];
}
}
printf("最高女兵的身高: %d ,次高女兵的身高: %d\n", *qishou[0], *qishou[1]);
system("pause");
return 0;
}
(2) int (*p)[3];
定义一个指向三个成员的数组的指针
#include <stdio.h>
#include <stdlib.h>
int main(void){
/*据同学们报告,A 栋学生楼有学生用高倍望眼镜偷看别人洗澡,
宿管办领导决定逐个宿舍排查,
得到的线报是 A0 到 A3 宿舍的 某个子最矮的男生。 */
int A[4][3]={{173,158,166},
{168,155,171},
{163,164,165},
{163,164,172}};
int (*p)[3];//定义一个指向三个成员的数组
p = &A[0];
//第一种 数组下表法
for(int i=0; i<4;i++){
for(int j=0; j<3;j++){
printf(" %d",(*p)[j]);//等同于 a[0] ,a[0][0]等同于(*p)[0]
}
printf("\n");
p++;
}
//第二种方法 指针访问法
for(int i=0; i<4;i++){
for(int j=0; j<3;j++){
printf(" %d",*((*p)+j));//等同于 a[0] ,a[0][0]等同于(*p)[0]
}
printf("\n");
p++;
}
system("pause");
return 0;
}