天天看點

06深入了解C指針之---指針操作和比較

深入了解C指針之---指針操作和比較

  該系列文章源于《深入了解C指針》的閱讀與了解,由于本人的見識和知識的欠缺可能有誤,還望大家批評指教。

  指針作為一種特殊類型的變量,必須遵守C語言中變量先聲明後使用的原則。本節内容中指針的操作主要包括指針的聲明、指針值的擷取、指針的解引、指針的列印、指針的閱讀及其他内容。

一、指針的操作:

  1、指針的聲明,切記指針是一種特殊變量,這種變量中沒有直接存儲數值,存儲的數值是另外變量的位址。

    其中,看代碼第6、7、8行,都是指針變量的聲明,無論*的位置如何,靠近int還是變量名,還是哪個都不靠近,都可以表示,根據自己的習慣堅持即可,個人建議靠近變量名好。

  2、位址操作符,使用&擷取變量位址的符号,常用來為指針變量指派。

    其中、代碼的第6、7、9行,都是位址操作符的應用

  3、指針的列印,使用%p占位符即可列印指針變量的值,另外變量的位址。

    其中、代碼的第12、13、14、19、21、23行都是列印指針值的應用

  4、指針的解引用,通過指針擷取指針值對應的變量的值。

    其中、代碼的第12、13、14、19、21、23行都是指針解引用的應用。

1 #include <stdio.h>
 2
 3 int main(int argc, char **argv)
 4 {
 5     int iVar = 19;
 6     int *ptrVar1 = &iVar;
 7     int* ptrVar2 = &iVar;
 8     int * ptrVar3 = NULL;
 9     ptrVar3 = &iVar;
10
11     printf("the iVar is %d and address is %p\n", iVar, &iVar);
12     printf("the ptrVar1 is %p and *ptrVar1 is %d\n", ptrVar1, *ptrVar1);
13     printf("the ptrVar2 is %p and *ptrVar2 is %d\n", ptrVar2, *ptrVar2);
14     printf("the ptrVar3 is %p and *ptrVar3 is %d\n", ptrVar3, *ptrVar3);
15
16     iVar++;
17     printf("the iVar is %d and address is %p\n", iVar, &iVar);
18     (*ptrVar1)++;
19     printf("the ptrVar1 is %p and *ptrVar1 is %d\n", ptrVar1, *ptrVar1);
20     (*ptrVar2)++;
21     printf("the ptrVar2 is %p and *ptrVar2 is %d\n", ptrVar2, *ptrVar2);
22     (*ptrVar3)++;
23     printf("the ptrVar3 is %p and *ptrVar3 is %d\n", ptrVar3, *ptrVar3);
24
25     return 0;
26 }      

二、指針的補充:

  1、null在C語言中充分展現了C語言的邏輯混亂,C語言中null的出現主要和指針變量有關。

    null宏定義中被定義為: #define NULL  ((void *)0)這種定義一般在stddef.h、stdlib.h和stdio.h中出現;

    null可以用來初始化指針變量,表示指針變量指向空,也可以直接将指針變量指派為零也可;

    null可以在字元中表示全為0的位元組,表示不包含任何内容;

人就像是被蒙着眼推磨的驢子,生活就像一條鞭子;當鞭子抽到你背上時,你就隻能一直往前走,雖然連你也不知道要走到什麼時候為止,便一直這麼堅持着。

繼續閱讀