二级指针
A(即B的地址)是指向指针的指针,称为二级指针,用于存放二级指针的变量称为二级指针变量.根据B的不同情况,二级指针又分为指向指针变量的指针和指向数组的指针。
int str = 10;
int *pstr = &str;
int **PPstr = &str;
二级指针与二维数组
#include <stdio.h>
int main(void)
{
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
printf("value of board[0][0]:%c\n",board[0][0]);
printf("value of *board[1] :%c\n",*board[1]);
printf("value of **board :%c\n",**board);
return 0;
}
运行的结果为:
value of board[0][0]:1
value of *board[1] :4
value of **board :1
Press any key to continue
由此可见:*board[1]
代表的是board[1]数组的首地址,同理*(board[1] + 1)
或*(*board + 3)
表示对board[1][1]进行访问。
指针做函数的输入、输出
代码1:
#include <stdio.h>
void fun(int i)
{
printf("fun: i = %d\n",++i);
}
int main(void)
{
int i = 3;
fun(i);
printf("main: i = %d\n",i);
return 0;
}
运行的结果为:
fun: i = 4
main: i = 3
Press any key to continue
代码2:
#include <stdio.h>
void fun(int *p)
{
printf("fun: i = %d\n",++(*p));
}
int main(void)
{
int i = 3;
fun(&i);
printf("main: i = %d\n",i);
return 0;
}
运行的结果为:
fun: i = 4
main: i = 4
Press any key to continue
对比一二发现:指针做函数参数时,传递的是变量的地址,间接的将变量传进去。 也可以将输出的值带出来。从而达到间接修改变量的目的。
代码3:
#include <stdio.h>
void fun(int a,int b,int *p)
{
*p = a + b;
printf("fun: a + b = %d,*p = %d\n",*p,*p);
}
int main(void)
{
int i = 3;
printf("main: i = %d\n",i);
fun(3,4,&i);
printf("main: i = %d\n",i);
return 0;
}
运行的结果为:
main: i = 3
fun: a + b = 7,*p = 7
main: i = 7
Press any key to continue
这段代码更直观的表示了指针做函数输出。main函数里的int型变量i,经过fun函数后,作为fun函数的输出。