1. Char **p;//这个p是二级指针
(类似于:char *p;p是一级指针)
地址1——————>地址2————————>变量
p *p **p
2 *除去定义时的作用,*是取值符号
3 二级指针就是跳2级。(从地址1跳到地址2是一级)
4 例程序:
main()
{static int a[5]={1,3,5,7,9};
int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
int **p,i;
p=num;//---------------注意这个!
//p存储了数组num的地址,*p存储了数组num中的值(值也为地址),**p连跳2级,表、、//示数组a中的值
for(i=0;i<5;i++)
{printf("%d/t",**p);p++;}
}
5 例程序2:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
//通过指针访问变量称为间接访问,通过指针的指针访问变量构成“二级间址”
typedef struct Node
{
int data;
}Seqlist,*Slink;
/
void InitSeqlist(Seqlist *L)
{
(*L).data=1;//这个(*L)实际上是一个确定的变量,只能用.不能用->
}
/
void InitSlink(Slink *P)//形参是二级地址
{
*P=(Slink)malloc(sizeof(Seqlist));
(*P)->data=2;
}
int main()
{
Seqlist *P;//一级指针
Seqlist L;//变量
InitSeqlist(&L);//参数是一级指针
InitSlink(&P);//参数是二级指针
printf("%d/n",L.data);
printf("%d",P->data);//输出是2
return 0;
}