今天认真分析了下指针,有一些感悟:
函数传递参数,只有传地址才能更改对应参数的值。
按照上面的原理,我们如果想要更改的是指针,那么我们必须传入指针的地址!!
也就是所谓的双层指针。
下面是我自己设计的一个验证代码,可以清晰看出,如果函数不传入指针地址的话,指针是不会移动的,依旧在原来的P头。
#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *Polynomial; // 多项式本身就是一个指针
struct PolyNode{
int coef; // 系数
int expon; // 指数
Polynomial link; // 指向下一个位置
};
void Test(Polynomial *p, Polynomial p2){
Polynomial pp;
pp = (Polynomial)malloc(sizeof(Polynomial));
pp->expon = 3;
pp->coef = 2;
pp->link = NULL;
(*p)->link = pp;
*p = pp;
p2->link = pp;
p2 = pp;
}
int main()
{
Polynomial p, temp1, temp2;
p = (Polynomial)malloc(sizeof(Polynomial));
p->coef = 4;
p->expon = 5;
temp1 = p;
temp2 = p;
Test(&temp1, temp2); // 修改内容,我们要传地址; 修改地址,我们要传地址的地址!!!
PrintPoly(temp1);
PrintPoly(temp2);
return 0;
}
网友评论