今天認(rèn)真分析了下指針,有一些感悟:
函數(shù)傳遞參數(shù),只有傳地址才能更改對應(yīng)參數(shù)的值。
按照上面的原理,我們?nèi)绻胍牡氖侵羔槪敲次覀儽仨殏魅胫羔樀牡刂罚。?br>
也就是所謂的雙層指針。
下面是我自己設(shè)計的一個驗證代碼,可以清晰看出,如果函數(shù)不傳入指針地址的話,指針是不會移動的,依舊在原來的P頭。
#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *Polynomial; // 多項式本身就是一個指針
struct PolyNode{
int coef; // 系數(shù)
int expon; // 指數(shù)
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); // 修改內(nèi)容,我們要傳地址; 修改地址,我們要傳地址的地址?。?!
PrintPoly(temp1);
PrintPoly(temp2);
return 0;
}