首页 > 其他 > 详细

内存分配与指针变量

时间:2020-03-14 01:15:29      阅读:125      评论:0      收藏:0      [点我收藏+]
2020/03/12学习笔记

malloc、free函数的使用

#include <stdio.h>
#include <stdlib.h>         //该头文件包括malloc、free函数
int main()
{
    int* ptrSpace = (int*)malloc(1024 * 1024 * 1024);
    //定义一个int* 型的指针变量,使用malloc函数申请1GB的内存空间,由于该文件的后缀是.cpp,所以需要强制类型转换
    free(ptrSpace);             //释放内存空间
    return 0;
    //所有类型的指针变量都是存储地址的,转换不转换都是个地址,确保赋值符两端类型始终相同。malloc()函数,是为指针开辟一片连续的内存空间,避免指针定义后指向不明的问题。在C语言中使用malloc()函数完全不必类型转换,但在c++中,这样的语句无法编译通过,加上类型转换,就能够让程序移植到c++ 中
}

技术分享图片技术分享图片
在使用malloc函数分配内存空间后,应该即使进行空间释放,如果不释放会在程序退出时有操作系统回收,但是如果是一个长期运行的程序或者系统,不及时释放使用的内存会带来一些问题。

怎样使用分配到的内存空间?
通过一种特殊的变量来读写内存,这种变量专门用来存储内存地址。不管是何种类型的指针变量,在同一种编译环境下它们占用的内存空间大小是完全一致的,例如:

int* ptr_i;
float* ptr_j;
double* ptr_k;
//这三个指针变量在内存空间内均占用4个字节,定义的三个指针变量,* 前面的int、float、double表明指针变量讲存储何种类型数的地址。

**间接运算符(‘*‘)**
在C语言中,可以在指针变量名前添加间接运算符 * ,来访问指针变量所指向的内存空间。

#include <stdio.h>
int main()
{
    int* ptr_i;
    printf("ptr_i自身的地址:%p\r\n", &ptr_i);
    return 0;
}
//运行结果:ptr_i自身的地址:0055FA6C

指针的加法计算
在对指针的变量进行加法计算时,是根据指针变量所指向的数据类型大小进行相加(加上一个当前所指数据类型的大小)计算,而不是算数上的加 1操作.

定义指针变量时应该初始化
和普通变量一样在定义指针变量时,如果定义的指针变量没有初始化,那么该指针变量的初值就是不确定的,这种指针可能指向任意内存区域(也就是所说的野指针)。如果后面的程序不小心使用了这个野指针,又可能会造成程序异常。

指针的使用
技术分享图片
技术分享图片
&运算符的作用
& 是取地址运算符,给出变量在内存中的存储地址

调用何老师的ConvertCurrency.lib库文件实现输出5个币种的外汇牌价表

/*
ProgramName:调用何老师的ConvertCurrency.lib库文件实现输出5个币种的外汇牌价表
Date:2020/03/13
Author:ileemi
Version: C语言入门版
*/

#include <stdio.h>
#include <stdlib.h>
#include "D:/CR37/Data/ConvertCurrency/ConvertCurrency.h"
#pragma comment(lib, "D:/CR37/Data/ConvertCurrency/ConvertCurrency.lib")

int OutputInformation(const char* currencyName, char* upDateTime, double* rates);//函数声明
int main()
{
        char* upDateTime = (char*)malloc(32);
        //定义一个char* 型的指针变量upDateTime,使用malloc()函数申请32字节的空间用来存储外汇牌价的发布日期、时间
        double* rates = (double*)malloc(sizeof(double) * 5);
        //定义一个double* 型的指针变量rates,使用malloc()函数申请5个double数据类型长度的内存空间
        printf("货币名称\t现汇买入价\t现钞买入价\t现汇卖出价\t现钞卖出价\t中行折算价\t发布日期   发布时间\r\n");
        
        if (upDateTime != NULL && rates !=  NULL)
        {
               printf("美元");
               GetBOCPriceByCode("USD", upDateTime, rates); //美元
               OutputInformation("USD", upDateTime, rates); //调用OutputInformation函数输出数据
               
               printf("卢布");
               GetBOCPriceByCode("RUB", upDateTime, rates); //卢布
               OutputInformation("RUB", upDateTime, rates);

               printf("澳元");
               GetBOCPriceByCode("MOP", upDateTime, rates); //澳元
               OutputInformation("MOP", upDateTime, rates);

               printf("日元");
               GetBOCPriceByCode("JPY", upDateTime, rates); //日元
               OutputInformation("JPY", upDateTime, rates);

               printf("英镑");
               GetBOCPriceByCode("GBP", upDateTime, rates);  //英镑
               OutputInformation("GBP", upDateTime, rates);

               printf("韩元");
               GetBOCPriceByCode("KRW", upDateTime, rates);  //韩元
               OutputInformation("KRW", upDateTime, rates);
        }
        free(rates);
        return 0;
}
int OutputInformation(const char* currencyName, char* upDateTime, double* rates)//函数定义
{
        printf("%s\t\t", currencyName);
        for (int i = 0; i < 5; i++)
        {
               printf("%f\t", *(rates + i));
               //依次输出5个数值
        }
        for (int j = 0; j < 19; j++)
        {
               printf("%c", *(upDateTime + j));
               //输出外汇牌价的发布日期、时间
        }
        printf("\r\n");
        return 0;
}

输出结果:
技术分享图片

内存分配与指针变量

原文:https://www.cnblogs.com/ileemi/p/12489930.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!