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