首页 > 系统相关 >C/C++ 为什么要使用动态内存?

C/C++ 为什么要使用动态内存?

时间:2022-10-14 20:47:38浏览次数:48  
标签:为什么 malloc int void C++ a1 动态内存 include

为什么要使用动态内存? 1.按需分配,根据需要分配内存,不浪费; 2.被调用函数之外需要使用被调用函数内部的指针对应的地址空间; 3.突破栈区的限制,可以给程序分配更多的内存。 (1)C 内存分配: void *malloc(size_t size); void free(void *); malloc 在内存的动态存储区中分配一块长度为 size 字节的连续区域返回该区域的首地址。 (2)C++内存分配: void *memcpy(void *dest, const void *src, size_t n); #include<string.h> 功能:从源 src 所指的内存地址的起始位置开始拷贝 n 个字节到目标 dest 所指的内存地址的起始位置中。

#include <iostream>
#include <string.h>
#include <windows.h>
using namespace std;
int main() {
    int farmer[10] = { 20,22,36,41,52,36,78,95,82,15 };
    int num = 0;
    int* salary = NULL;

    printf("请输入需要雇佣的农民数量:\n");
    scanf_s("%d",&num);

    if (num < 10) {
        cout << "请输入一个大于9的数!" << endl;
        system("pause");
        exit(1);
    }
    //后面新增的都是18
    salary = new int[num];
    //第一种:逐个赋值
    //for (int i = 0; i < sizeof(farmer) / sizeof(int); i++) {
    //    *(salary + i) = farmer[i];
    //}
    //第二种,内存拷贝
    memcpy(salary, farmer, sizeof(farmer));

    for (int i = sizeof(farmer) / sizeof(int); i < num; i++) {
        //salary[i]=18;
        *(salary + i) = 18;
    }

    for (int i = 0; i < num; i++) {
        printf("第%d个农民的薪资:%d\n",i+1,salary[i]);
    }

    delete[] salary;

    system("pause");
    return 0;
}

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
//通过返回动态内存的指针 
int * demo(int count){ 
    int *ap = NULL; 
    //new delete C++ 的动态内存分配操作符 c 语言是 malloc 
    ap = (int *)malloc(sizeof(int) * count);
    //参数:所需内存的字节数 
    //ap = new int[count]; 
    for(int i=0; i<count; i++){ 
        ap[i] = 100+i; 
    }
    for(int i=0; i<count; i++){ 
        printf("*(ap+%d) = %d\n", i, *(ap+i)); 
    }
    return ap; 
}
//通过二级指针来保存 
void demo1(int count, int ** pointer_p){ 
    int * ap = NULL; 
    *pointer_p=(int *)malloc(sizeof(int) * count); 
    ap = *pointer_p; 
    for(int i=0; i<count; i++){ 
        ap[i] = 100+i; 
    }
    for(int i=0; i<count; i++){ 
        printf("*(ap+%d) = %d\n", i, *(ap+i)); 
    } 
}
int main(void){ 
    //两种方式获取被调用函数内部的内存 
    int * pointer = NULL; 
    int count = 10;
    //第一种,通过返回动态内存的指针 
    //pointer = demo(count); 
    //第二种,通过二级指针来保存 
    demo1(count, &pointer); 
    for(int i=0; i<10; i++){ 
        printf("*(pointer+%d) = %d\n", i, *(pointer+i)); 
    }
    //用完了,要记得释放 free(pointer); 
    //c 语言中的释放内存函数,相当于 delete 
    system("pause"); 
    return 0; 
}

#include <stdlib.h> 
#include<stdio.h> 
#include<string.h> 
//栈区的空间大小是有限制的,windows 上一般是 1M - 2M 
void demo(){ 
    //int a1[102400*2]; 
    //100k*2*4 = 800K 
    //int a1[102400*3]; 
    //100k*3*4 = 1200K = 1.2M 
    int * a1; 
    //如果使用堆的话,64 位 windows 10 系统的限制是 2G 
    a1 = (int *)malloc((int)(1024*1000*1000));//分配 2G 
    a1[0]=0; 
    printf("This is a demo.\n"); 
}
int main(void){ 
    printf("--start--\n"); 
    demo(); 
    printf("--end--\n"); 
    system("pause"); 
    return 0; 
}

标签:为什么,malloc,int,void,C++,a1,动态内存,include
From: https://www.cnblogs.com/smartlearn/p/16792915.html

相关文章

  • C++ openCV 相关
    1.opencv的Mat矩阵Mat是opencv在C++中的一个图像容器类,可以使用Mat进行图像矩阵的定义Mat矩阵的定义#include<iostream>#include<opencv2/opencv.hpp>//定义图像......
  • C++实现太阳系行星系统
    实验楼项目:C++实现太阳系行星系统关于详细知识跟着实验做比较好基础知识做这个项目需要知道一些基础知识:OpenGLGLUT类设计main.cpp#include<GL/glut.h>#include......
  • C++11 中的 noexcept
    关键字noexcept用于指出函数不会引发异常,它也可用作运算符,判断操作数(表达式)是否可能引异常:如果操作数可能引发异常,则返回false,否则返回tue。例如,请看下面的声明:......
  • C++程序的内存分区
    1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等。2、堆区(heap):一般由程序员分配释放,随叫随到,挥之即走。3、全局/静态区(static):全局变量和静态变量的存储是......
  • 为什么网络钓鱼攻击仍然有利可图----以及如何阻止它
    随着商业世界继续努力应对新常态的不断扩展,网络钓鱼攻击仍然是攻击者的一种常见策略。为什么网络钓鱼攻击仍有发生?我们该如何预防他们呢?我们采访了一位威胁分析师,他告诉了我......
  • C/C++ 错题总结
    写出下列程序在X86上的运行结果structmybitfields{unsignedshorta:4;......
  • extern、关于C++的变量和类的声明和定义
    extern参考:extern声明变量详解变量的声明:intdata;//这样既声明了data同时也定义了dataexternintdata;//只声明而不定义函数的声明:voidhello();......
  • Python 函数为什么会默认返回 None?
    Python有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写return语句。本文出自“​​Python为什么​​​”系列,在正式开始之前,我们就......
  • Python 的十万个为什么?
    随着Python在近些年的火爆,网上出现了很多这个方向的公众号和博客,文章也层出不穷。受到此风气的影响,我也把自己“培养”成了一名技术博主,写作近两年来,陆陆续续写过不少的系......
  • Python 为什么没有 main 函数?为什么我不推荐写 main 函数?
    毫无疑问Python中没有所谓的main入口函数,但是网上经常看到一些文章提“Python的main函数”、“建议写main函数”……有些人是知情的,他的意图可能是模仿那些正宗的......