定義:指標是一個變數,其值是另一個變數的地址,地址代表的是在記憶體中的位置。需要記住的是,陣列變數本身就是一個指標。
地址的類型
地址是存在類型的,是不是感覺好奇怪,指標不是代表一個地址的嗎,地址還有類型嗎?看一個例子:
int *ip; /* 一個整型的指標 */double *dp; /* 一個 double 型的指標 */float *fp; /* 一個浮點型的指標 */char *ch; /* 一個字元型的指標 */
其實指標永遠都只是一個代表一個地址的十六進位數,所謂的類型,指的是指標指向的變數的類型。
使用指標
如何定義一個指標,前面的例子應該知道了,那麼如何列印那個十六進位的地址是多少和或者指標指向的資料是多少:
//通過&運算子擷取了i的地址並儲存到intP中去int *intP; = &i;printf("intP儲存的地址為:%p,儲存的地址指向的資料為:%d\n", intP, *intP);
指標可以進行運算:++、--、+、-
此外,指標還可以用關係運算子進行比較,如 ==、< 和 >
int intArr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//先定義一個指標執行數組第一個元素int *intArrP = &intArr[0];printf("此時intArrP儲存的地址為:%p,資料為:%d\n", intArrP, *intArrP);//自增一下看看結果(每增加一次,它都將指向下一個整數位置)intArrP++;printf("自增以後intArrP儲存的地址為:%p,資料為:%d\n", intArrP, *intArrP);
指標還可以指向指標
int data = 5201314;int *p1 = &data;int **p2 = &p1;printf("%d\n", data); //都是5201314printf("%d\n", *p1);printf("%d\n", **p2);
結構體和指標
結構體中對指標的使用會稍微特殊一點,主要因為結構體本身的特殊性,想使用結構體中的一個值,一般分為通過結構體自身和指向結構體的指標二種情況,具體看下面的例子:
struct Node{ int val; };//先建立一個結構體資料struct Node node;node.val = 1;struct Node *nodeP; //建立一個指向剛剛的結構體的指標nodeP = &node;printf("%d\n", nodeP->val);//指向結構體的指標用->printf("%d\n", node.val);//結構體自身用.
相關文章:
C#中關於ActiveMQ的應用詳解
相關視頻:
C 語言教程