动态内存函数使用代码

malloc

void \*malloc(size_t size)

  • size -- 内存块的大小,以字节为单位。
    该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。
    如果我们需要解引用指针,那么就必须指定它的类型,之前我们讨论过这个问题。直接强转转换需要的类型就可以。
#include<stdio.h>
#include<Windows.h>
int main()
{
	char*p = (char*)malloc(10 * sizeof(char));
	p = "cvpotato";
	printf("p = %d %s", p, p);
}
C++

calloc

&nbsp;void *calloc(size_t nitems, size_t size)

  • nitems -- 要被分配的元素个数。
  • size -- 元素的大小。
    calloc和malloc的区别是calloc会初始化从堆分配内存为0 而malloc不会初始化为0
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable:4996)
    int main()
    {
        int i, n;
        int* a;
        printf("要输入的元素个数:");
        scanf("%d", &n);
        a = (int*)calloc(n, sizeof(int));
        printf("输入 %d 个数字:\n", n);
        for (i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        printf("输入的数字为:");
        for (i = 0; i < n; i++) {
            printf("%d ", a[i]);
        }
        free(a);  // 释放内存
        return(0);
    }
C++

realloc

如果你想修改已经申请的内存块的大小
void *realloc(void *ptr, size_t size)

  • ptr -- 要重新分配内存的内存块。如果为NULL则表示重新申请一块内存 与malloc功能一样
  • size--内存块新的大小,以字节为单位。如果为0,则功能和free一样,释放ptr指向的内存块,并且返回一个空指针
#include<stdio.h>
#include<Windows.h>
#pragma warning (disable:4996)
int main()
{
	int n = 0;
	printf("请输入数组的大小\n");
	scanf("%d", &n);
	int* p = (int*)calloc(n ,sizeof(int));
	for (size_t i = 0; i < n; i++)
	{
		p[i] += i;
	}
	int*B = (int*)realloc(p, 2*n*sizeof(int));
	printf("p = %d B = %d\n", p, B);
	for (size_t i = 0; i < 2*n; i++)
	{
		printf("%d\n", B[i]);
	}
	free(p);	
}
C++

动态内存函数使用代码

可以看到p的地址和B的地址一样 由此可以推断B内存在p内存上进行了扩展 如果没有连续内存的话 B会创建一块内存区域 然后把A的内容拷贝过来 (新申请内存大于之前的内存)
如果新申请的内存小于之前申请的内存,realloc会把多出来的内存区域释放掉,realloc(p,0);相当于free(p);

动态内存函数使用代码

C语言

堆和栈

2024-11-14 11:30:29

C语言

关于C语言随机数

2024-11-14 11:45:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索