菜鸟帮你吧。我自己前两天做过这种东西,输出验证 之类的
#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个该类型的占位, *(地址值),是修改这个地址里存的数据