IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】动态内存分配【malloc】 -> 正文阅读

[C++知识库]【C语言】动态内存分配【malloc】

? TT最近在做数组的题目,就遇到了一个很烦人的问题:很多不给数组的长度,但是要我输入这个数组的值。也就是说,我都不知道这个数组要开多长,他却既要我输入数据,还要我保存输出和计算!(C99条件下的编译器完全不需要担心这个问题)

?可怜的TT每次都是开一个[10000]的数组,有时候甚至还要更大,放在堆中~

可是今天,老师一语点醒梦中人呐!

正片开始

C99是允许变量定义数组长度的,就像这样

//C99
int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[n] = { 0 };
	return 0;
}

可是我的编译器【VS2022】却会变成这样

我猜测可能就是编译器不支持C99的原因(也可能是其他原因~)

那这样的话就只能使用C89的动态内存分配了?

动态内存分配要使用malloc函数?

头文件

#include<stdlib.h>
它的作用是像计算机申请一段空间的内存,而且可以使用变量

但是他的返回类型是void*,所以必须使用到另外一个运算符 强制类型转换()

上代码(简单版)

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int* a = (int*)malloc(n * sizeof(int));//申请失败会返回NULL
	//此时就可以把a当做一个数组使用了
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);//但是有个缺点,每输入一个数就要按一次enter键
	}
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	free(a);//一定要free
	return 0;
}

使用malloc必须要注意的是,申请完必须要free,否则,程序不停止的话(比如服务器程序,一打开就不在停止运行),你的电脑可能撑不了多久。

问题来了

把printf拿上去一起循环的话就会显得这个程序很没用?【doge】)而且还变复杂了,很显然,它还有更大的用处。这要看你怎么使用这个厉害的函数了。要注意free一定要是原来的变量,所以我们一般不对原来的变量做计算。

不妨再看看下面一段代码。

#include<stdio.h>
#include<string.h>//strchr函数(寻找字符串中的特定字符,并返回对应指针)的头文件
int main()
{
	char arr[] = { "hello" };
	char* p = (char*)malloc(strlen(arr) + 1);//malloc的参数里面只需要表示大小的表达式,sizeof和strlen都可以做到
	//char* p = (char*)malloc(5*sizeof(int));//这样也可以,这里是字符串,所以就直接使用strlen了
	p = strchr(arr, 'l');
	printf("%s", p);
	return 0;
}

?希望与诸君共勉~

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:43:27  更:2021-12-28 22:43:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:29:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码