关于指针

今天认真分析了下指针,有一些感悟:
函数传递参数,只有传地址才能更改对应参数的值。
按照上面的原理,我们如果想要更改的是指针,那么我们必须传入指针的地址!!
也就是所谓的双层指针。
下面是我自己设计的一个验证代码,可以清晰看出,如果函数不传入指针地址的话,指针是不会移动的,依旧在原来的P头。

#include 
#include 
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;
}

你可能感兴趣的:(关于指针)