zoukankan      html  css  js  c++  java
  • 【C语言入门教程】4.7 指针的地址分配

    指针变量可指向任何类型的变量,在处理过程中,指针变量指向的变量通过传递变量的地址来实现,指针变量的取值是内存的地址,这个地址应当是安全的,不可以是随意的。否则,写入内存单元的值将使得已存放的数据或程序丢失。应使用变异系统提供的标准函数来实现地址分配。

    GCC编译器支持动态分配内存的函数 malloc()free(),它们包含在头文件 stdlib.h 中。动态内存分配的含义是在程序执行的过程中,动态地划分内存空间供程序使用。当程序不需要使用这些内存空间,则可以将其释放。malloc() 函数的作用是向操作系统申请内存,free() 函数的作用是释放所申请的内存。如下例所示:

    char *pc;			// 声明字符型指针变量 pc
    pc = malloc(50);	// 在内存中为程序申请 50 字节的空间,并将首地址赋值给指针变量 pc
    if (pc != NULL)		// 如果分配内存成功,则执行下列源代码
    {
    	scanf("%49s", pc);	// 从键盘输入获得字符串,并保存在 malloc() 所划分的内存空间内
    	puts(pc);			// 输出字符串
    	free(pc);			// 释放 malloc() 函数所申请的内存空间
    	pc = NULL;			// 是指针指向空地址,避免再次引用所释放的内存空间
    }

    malloc() 函数的参数是长整型数值,该数值表示所申请的字节数。如果分配内存失败返回 NULL,如果成功返回所申请内存空间首地址。free() 函数必须与 malloc() 配对使用,在不需要所申请的内存空间后将其释放,否则
    会造成内存泄漏,影响操作系统和其他程序运行。另外需要注意的是,free()函数释放指向 NULL 的指针,或释放指向并非 malloc() 函数所申请内存空间的指针都会造成严重的程序错误。

  • 相关阅读:
    大话字符串逆序
    Class文件结构全面解析(上)
    怎么把CAT客户端的RootMessageId记录到每条日志中?
    阅读JDK源码后,我有了优化它的冲动!
    CAT客户端如何从Apollo中读取配置?
    Sublime Text 3许可证
    通俗易懂地给女朋友讲:线程池的内部原理
    五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
    分布式监控CAT服务端的本地部署
    如何优雅的设置线程池的大小?
  • 原文地址:https://www.cnblogs.com/52php/p/5681346.html
Copyright © 2011-2022 走看看