指標也是一種資料型別

2022-08-31 00:06:23 字數 1503 閱讀 1773

關於資料型別我們可以在資料結構(c語言版)中看到是這麼定義的:

可分兩類:

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

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

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

指標型別和其他型別有什麼不一樣,這就是我們要討論的問題;

在不同的計算機(16位、32位、64位)裡資料型別分配的空間大小是不一樣的:比如 int 2或4位元組 float 4位元組 double 8位元組 

看一下**:

#include

#include

#include

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語言的高效率就無法得到體現了。

指標也是一種資料型別

int getabc1 char p1 int getabc2 char p2 int getabc3 char p3 int getabc4 char p4 30 int getabc5 char p5 10 30 指標做函式引數時,形參有多級指標的時候,站在編譯器的角度,只需要分配4個位元組的記...

模板類 型別也是一種資料

template class base class class type class ctypedptrarray public base class ctypedptrarray型別化指標陣列類的模板類決定其要派生的父類 type類則是其元素的型別 常見的模板引數用法 class cobarray...

C語言 C語言指標鐵律之一 指標也是一種資料型別

指標也是一種變數,占有記憶體空間,用來儲存記憶體位址。char p1 0x100 這裡分配了4個位元組的記憶體。在指標宣告時,符號 表示所宣告的變數為指標。在指標使用時,符號 表示操作指標所指向記憶體空間中的值 p 相當於通過位址 p變數的值 找到一塊記憶體,然後對記憶體進行操作。p 放在等號的左邊...