关于数据类型我们可以在数据结构(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语言的高效率就无法得到体现了。