關於數據類型我們可以在數據結構(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語言的高效率就無法得到體現了。