C語言中關於指針等相關理解和使用事宜

做者:心葉
時間:2018-04-21 17:24node

定義

指針是一個變量,其值是另外一個變量的地址,地址表明的是在內存中的位置。數組

須要記住的是,數組變量自己就是一個指針。指針

地址的類型

地址是存在類型的,是否是感受好奇怪,指針不是表明一個地址的嗎,地址還有類型嗎?看一個例子:code

int    *ip;    /* 一個整型的指針 */

double *dp;    /* 一個 double 型的指針 */

float  *fp;    /* 一個浮點型的指針 */

char   *ch;     /* 一個字符型的指針 */

其實指針永遠都只是一個表明一個地址的十六進制數,所謂的類型,指的是指針指向的變量的類型。ip

使用指針

如何定義一個指針,前面的例子應該知道了,那麼如何打印那個十六進制的地址是多少和或者指針指向的數據是多少:內存

//經過&運算符獲取了i的地址並保存到intP中去

int *intP; = &i;

printf("intP存儲的地址爲:%p,存儲的地址指向的數據爲:%d\n", intP, *intP);

指針能夠進行運算:++、--、+、-變量

此外,指針還能夠用關係運算符進行比較,如 ==、< 和 >float

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); //都是5201314

printf("%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);//結構體自身用.
相關文章
相關標籤/搜索