指针申请内存后到底有什么变化?

我的个人网站:
http://riun.xyz

---

 

我是一名在校大学生,以下纯属个人观点,都是经过我反复思考过的东西,我感觉这些东西在我学c时带了了许多不便,学校讲的也不好,只能自学。

若您发现任何错误,请发到我邮箱1195264226@qq.com 进行纠正,非常感谢!

 

在讲这个问题之前要先纠正一个大多数人嘴边的错误:

 

为一个指针申请内存,并不是人们理解的那个‘为’指针申请空间,

而是单独申请一个空间,把这个空间的地址给指针,

申请空间时都是这样的格式:

p=(type*)malloc(sizeof(type)*n);

那个等号的意义是:把这块空间的地址赋给p,比如这块单独申请的空间地址是0xa11,那么p里面存储的地址就是0xa11,

只是简单的把p指向了那块空间,指针本身的空间是不会变的,这个可以做一个实验:

char *p;

printf("%d\n",sizeof(p));

p = (char*)malloc(sizeof(char)*100);

printf("%d\n",sizeof(p));

输出的数是一样的,这里要讲一下sizeof的功能

sizeof用于输出变量占的字节数,就是占的内存是多少

可以看到并没有因为 ‘为’ 指针申请了空间这个指针的内存就变大,也就是说,并不是所谓的 ‘为’ 指针申请空间

大家都知道指针是存放地址的

这个指针还是那个指针,只是指针存放的地址改变了,变成了一块申请了了的内存地址。

 

那么,指针申请内存后到底都有什么区别呢?

首先,如果不申请内存给指针,那么这个指针只能用来改变指向,就是说这个指针只能指指这里指指那里,不能对指针进行输入操作

因为如果对没有分配内存的指针进行输入的话,让你自己想想,指针只是存放地址的容器,你这个输入到底输到了哪呢?

所以直接对指针进行输入操作的地方,都要为指针申请空间。

 

今天有事,后续更新。。。。。。

 

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
malloc 是 C 语言中的一个函数,它用于在程序运行时动态申请内存。malloc 函数的实现机制是在堆(heap)中分配一段连续的内存空间,并返回指向该内存空间指针。 堆是一种动态内存分配机制,它是指在程序运行过程中动态分配的内存空间。堆内存空间的大小可以在程序运行时动态调整,因此堆内存空间的大小是不确定的。 动态内存分配和静态内存分配所占的内存区是不同的。静态内存分配是在程序编译时就确定了内存空间的大小和位置,它所占用的内存区是静态数据区。而动态内存分配是在程序运行时才分配内存空间,并且所占用的内存区是堆(heap)。 堆是由操作系统维护的,它的大小是动态变化的。当我们使用 malloc 函数申请内存时,操作系统会在堆中分配一段连续的内存空间,并返回指向该内存空间指针。malloc 函数会在堆中查找一段足够大的连续空间,如果找到了就将这段空间分配给程序使用,如果找不到就会返回 NULL。 由于动态内存分配是在程序运行时才进行的,因此需要程序员自己管理和释放所申请内存空间。如果程序员没有正确地管理和释放内存空间,就会导致内存泄漏等问题。 总之,malloc 函数是通过在堆(heap)中分配一段连续的内存空间来实现动态内存分配的,而静态内存分配所占用的内存区是静态数据区。动态内存分配需要程序员自己管理和释放内存空间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值