指針也是一種數據類型


  關於數據類型我們可以在數據結構(c語言版)中看到是這么定義的:

  可分兩類:

  一類是 非結構的原子類型,其值是不可分解的,例如c語言中的基本類型(整型,實型、字符型和枚舉類型)、指針類型和空類型。

  另一類是結構類型:是由若干成分按某種結構組成,因此是可以分解的,它的成分可以是非結構的,也可以是結構的的;

  從這里我們可以看到,我們可以看到指針屬於非結構的原子類型,而且和整型(int),實型(float,double)這些基礎類型不一樣,可以看作是一個特殊的類型。

  指針類型和其他類型有什么不一樣,這就是我們要討論的問題;

  在不同的計算機(16位、32位、64位)里數據類型分配的空間大小是不一樣的:比如 int 2或4字節 float 4字節 double 8字節 

  看一下代碼:

  #include <stdlib.h>

  #include <string.h>

  #include <stdio.h>

  void main()

  {

    printf(“sizeof(int):%d\n",sizeof(int));//4

    printf("sizeof(float):%d\n",sizeof(float));//4

    printf("sizeof(double):%d\n",sizeof(double));//8

    printf("sizeof(char):%d\n",sizeof(char));//1

    

    //看一級指針所占的內存空間
    printf("sizeof(int *):%d\n",sizeof(int *));//4
    printf("sizeof(double *):%d\n",sizeof(double *));//4
    printf("sizeof(float *):%d\n",sizeof(float *));//4
    printf("sizeof(char *):%d\n",sizeof(char *));//4
    //看二級指針所占內存空間
    printf("sizeof(char **):%d\n",sizeof(char **));//4

    //下面我們看看六級指針所占的內存空間大小

    printf("sizeof(char ******):%d\n",sizeof(char ******));//4

    system("pause");

  }

  於是我們發現不管是何種類型的指針,都只占四個字節的內存空間;甚至多級指針也只占四個字節的內存空間;這說明不管幾級指針都只占四個字節的內存空間。

  那么這到底是為什么?因為指針是一種特殊的數據類型,它不像基本類型那樣可以直接賦值到內存空間,也就是說指針的內存空間是無法存取數據的,那么它所指向的空間你到底存儲的是什么?正如我們知道的,就是地址,指針就是通過操作地址來操作空間的;

  這就是為什么指針只占四個字節的原因,它只需要儲存地址,或者說只能存儲地址,於是它並不是說讓指針指向一個一千字節的空間,那么就重新分配一千字節的內存空間,那樣的話豈不是大大的拉低c語言的效率么?c語言之所以高效率就是因為可通指針不斷的操作內存空間,倘若每次調用都要重新分配內存空間,並將數據讀取進去,那么c語言的高效率就無法得到體現了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM