总结:一维指针
如:
int *c; //定义一个指针C
int d=10; //变量的值为10
c=&d; //指针c指向d的地址
当执行*c=5时;即等价于执行d=5;
总结:二维指针
如:
int **a; //定义二维指针。即指向指针的指针
int *c; //定义一维指针
int d=10;
a=&c; //二维指针指向一维指针c的地址
当执行*a=&d,即等价于执行c=&d
当执行**a=5时,即等价于执行*c=5,等价于执行d=5
下面是实际情况解析,如果上面能懂下面就不必要了
我们平常使用指针把参数从函数中传递出来,传递的是指针所指向的内容
话不多说直接看下面的程序,读懂一维指针
#include <stdio.h>
void fun(int *a);
int main()
{
int *c; //定义一个指针C
int d; //定义一个变量
d=10; //变量的值为10
c=&d; //c指向d的地址
fun(c); //将指针C传入参数中
printf("%d\n",*c); //猜猜这里C输出值是5还是10
return 0;
}
void fun(int *a)
{
int b=5;
a=&b;
}
很明显C输出的值还是10,因为C所指的地址并没有改变,
我们来分析一下void fun(int *a);这个函数
首先当执行 fun(c); //将指针C传入参数中
实际等价于
a=c;//即a指向c的地址,即此时为a=c=&d
然后在fun()函数中定义了变量
int b=5;
执行a=&b; 即a所指的方向发生了改变,但是c所指的方向并没有改变
所以c指针所指的地址还是原来的 c=&d
因此当执行printf("%d\n",*c);时
输出的值为c所指地址的内容即输出为10。
那有什么办法可以将 可以将b的值传递给C呢?
下面介绍两种方法,一种还是用一维指针,另一种就是今天要介绍的二维指针了
先介绍第一种
void fun(int *a)
{
int b=5;
a=&b;
}
这是原来的函数内容,我们只需做如下改变即可
void fun(int *a)
{
int b=5;
*a=b;
}
原理很简单
当执行 fun(c); //将指针C传入参数中
a=c;//即a指向c的地址,即此时为a=c=&d
执行*a=b;即执行d所处地址的内容等于b;
最终执行
printf("%d\n",*c);
此时输出的值C=5。
另一种方法即二维指针
void fun(int *a)
{
int b=5;
a=&b;
}
这是原来的内容,我们只需做如下修改
void fun(int **a)
{
int b=5;
*a=&b;
}
当执行fun(c);
二维指针int **a指向c指针的地址
而当执行*a=&b;时
即是将指针C所指d的地址改为b的地址。
因此当执行
printf("%d\n",*c); 时
输出的值就为5了