菜鸟帮你吧。我自己前两天做过这种东西,输出验证 之类的
#include<stdio.h>
int main()
{
int a[5]={2,3,8,9,4};
int *pi[5]={&a[0], &a[1], &a[2], &a[3], &a[4] }; /*////*pi[5]是个数组,它包括5个指针变量,*pi[0]~*pi[4]。现在是分别让这5个指针变量指向数组a的5个成
员,
指针变量pi[i]存的是a[i]的地址
int **ppi,i;
ppi=pi;
///////指向指针的指针变量**ppi,现在ppi内存的是数组pi的首地址。那么*ppi是pi[0]的内容,就是a[0]的地址,*(*ppi)=**ppi就是a[0]的内容了
for(i=0;i<5;i++)
{
printf("%d\t",**ppi);
ppi++;
///////ppi的 内容 自加相应类型数据占位个数,即所指地址移动一个
}
printf("\n");
//用指针ppi按从小到大输出输出数组a中的数字
ppi=pi;
ppi[1]=pi[1];
//////这种形式没写过,不过做过类似的。ppi[1]相当于*(ppi+1),(ppi+1)就是ppi的内容增加1个单位---是Pi[1]地址值,*(ppi+1)就是改内存单元的内容,就是pi[1]内容,这里pi[1]指向没变。
ppi[2]=pi[4];
///////这里修改了pi【2】的指向,让pi【2】指向了a[4]
ppi[3]=pi[2];
/////////这里修改的是pi【3】的指向=pi【2】,pi[3]也指向a[4]
ppi[4]=pi[3];
//////pi【4】指向a【4】
/////所以你的输出只是
2 3 4 4 4
ppi=pi;
//////这个多余。ppi一直指向pi数组的首地址。
for(i=0;i<5;i++)
{
printf("%d\t",**ppi);
ppi++;
/////////这里才是在修改ppi的指向。使ppi指向pi数组的下一个成员
}
return 0;
}
//////// 我感觉你最不明白的是ppi【i】中它是
*(ppi+i),
()的优先级高于*,先算(),是ppi的内容+ i个该类型的占位,
*(地址值),是修改这个地址里存的数据