由于这两天看的数据结构都跟C语言相关,这2天的代码中都遇到了指针的问题,所以今天就看了一些关于指针的博客,然后突然想到一个问题,一个int型的指针占几个字节。
一个int型变量占4个字节,那一个int型指针占几个字节啊,比如int *a,是占一个还是4个,跟这个指针的类型有关系吗?
如果你没搞懂这个问题,那你应该还没搞懂:指针里面存的是什么。
指针可以看作一个普通的变量,只不过里面存的内容是一个地址而已。并且指针类型要和指向的内容类型相同。如下图所示,定义了一个int型的c变量,然后定义一个int型的指针a指向c变量(指向可能不太好理解,实际上就是a把c的地址存起来了),那么这个这个指针是把 int c的第一个内存单元的地址存起来了呢,还是把int c的4个内存单元的地址都存起来了呢
答案是,不管这个指针是什么类型的,不管指针所指向的变量是什么类型的,都只存第一个内存单元的地址,所以指针的大小是固定的。
所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。具体是几个字节与计算机寻址位数,也就是内存地址长度有关,通常32位机器是4字节,64位机器是8字节。
接下来一起看一段代码
void InitList(SLinkNode *&L)
{
L=(SlinkNode *)malloc(sizeof(SLinkNode));
L->newt-NULL;
}
我们上面不是提到指针是一个字节的大小吗,这里为啥给指针L分配了一个SLinkNode类型的大小呢,如果你也这么想到话,那么恭喜你成功入坑了,因为malloc()函数分配的是L所指向空间的大小,跟L本身的大小没有关系。