一个int型指针占几个字节,跟指针的类型有关系吗?(2020.11)

由于这两天看的数据结构都跟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本身的大小没有关系。

猜你喜欢

转载自blog.csdn.net/weixin_42509923/article/details/109646239