关于指针、地址的大小的问题(以及malloc的用法)

任何变量的指针大小都是一样大小的空间,例如在64位机中是4个字节,在32位机中是2个字节。

而我们分配一个地址,就比如
力扣145题icon-default.png?t=L892https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/er-cha-shu-de-hou-xu-bian-li-by-leetcode-solution/
该题其中一句:

int *matrix = malloc(sizeof(int) * 2001);

给res这个指针分配了2001的int大小的空间,实际上就是给这里分配了可以装下2001个int类型变量的空间, 并且空间的首地址分配为res。

虽然分成了块,但是实际上空间是连续的,会意即可。
 


接下来,我们插入一个程序
 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
    char aa[10];
}Node;

int main()
{
    Node* fat = (Node*)malloc(sizeof(Node*));
    strcpy(fat->aa, "aaa");
    printf("%s", fat->aa);
}

 有什么问题呢,我们看到

Node* fat = (Node*)malloc(sizeof(Node*));

Node*表示分配的是Node*(也就是指针4字节)这么大的空间,
实际上我们需要的是Node这么大的空间分给fat这个指针。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值