赞
踩
- #include <stdio.h>
- #include <stdlib.h>
-
- int main(int argc, char const *argv[])
- {
- /*
- void * malloc(size_t size)
- size_t ==> unsigned long无符号长整型,仅支持正数使用
- malloc 函数接受一个参数 size,表示需要分配的字节数
- 分配成功返回一个指向分配内存的指针;如果分配失败,返回 NULL。
- void * 万能指针,可以指向任何一个空间首地址,但是系统要求,不可以通过
- void * 访问读取目标空间中数据内容。在使用时需要进行【强制类型转换】,
- 明确告知当前指针对应数据空间,按照哪一个类型进行处理。
- */
- //当前操作只是向 CPU 申请内存堆区空间,要求空间字节数为 40 个字节
- void *p = malloc(40);
- // 强制类型转换,告知 CPU当前 p 对应的地址按照 int 类型数据处理方式
- int *p1 = (int *)p;
-
- /*
- 通过 p1 操作申请的空间,CPU 通过
- p1 操作的对应空间每一个元素都是 int 类型
- */
- for (int i = 0; i < 40 / sizeof(int); i++)
- {
- //1.指针方式操作
- //*(p1 + i) = i * 2;
- //2.数组方式操作
- p1[i] = i * 2;
- }
-
- for (int i = 0; i < 40 / sizeof(int); i++)
- {
- // 方式一: 可以按照指针形式进行操作
- // printf("*(p2 + %d) = %d\n", i, *(p2 + i));
-
- // 方式二: 可以按照数组形式进行操作,当前指针形式,数组的存储数据类型为 int 类型
- printf("p1[%d] = %d\n", i, p1[i]);
- }
-
- printf("p = %p\n", p);
- printf("p1 = %p\n", p1);
-
- /*
- void free(void* ptr);
- free 函数是用于释放 malloc realloc calloc 申请的内存空间,需要提供给当前
- 函数申请空间的【首地址】,所需参数是 void * 类型,在实际使用中,可以提供任意类型
- 指针。
- free 操作将 p2 指向内存空间进行释放操作,告知系统当前内存使用完毕,可以其他程序
- 申请。
- */
- free (p);
-
- /*
- p 和 p2 原本都存储申请空间首地址,但是对应空间已经通过 free 释放
- 归还给系统,为了安全操作不可以通过 p 和 p2 访问原本的数据空间,重新
- 赋值为 NULL,防止后期使用。
- */
- p = NULL;
- p1 = NULL;
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
-
- int main(int argc, char const *argv[])
- {
- /*
- calloc 案例
- void *calloc (size_t_num, size_t_size);
- 通过 calloc 函数申请内存【堆区空间】, 要求申请的每一个元素
- 占用内存 4 个字节,总计内存 40 个字节
- 同时将当前申请的内存空间首地址,强转为 int 类型,
- CPU 通过 p 操作对应内存空间,每一个元素都是 int 类型
- */
- int *p = (int *)calloc(10, sizeof(int));
-
- for (int i = 0; i < 10; i++)
- {
- p[i] = i + 1;
- }
-
- for (int i = 0; i < 10; i++)
- {
- printf("p[%d] = %d\n",i , p[i]);
- }
-
- //释放空间
- free(p);
- //擦除数据
- p = NULL;
- return 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
-
- int main(int argc, char const *argv[])
- {
- // malloc 申请 40 个字节空间数据
- int *p = (int *)malloc(10 * sizeof(int));
- printf("p = %p\n", p);
-
- for (int i = 0; i < 10; i++)
- {
- *(p + i) = i * 2;
- }
-
- for (int i = 0; i < 10; i++)
- {
- printf("*(p + %d) = %d\n", i, *(p + i));
- }
-
- /*
- void * realloc (void *ptr, size_t_size);
- ptr 是需要提供给当前函数通过 malloc calloc realloc 申请
- 的内存空间的首地址, size 是当前重新分配空间对应的空间字节数
- 返回值是新空间首地址
- 1.地址不变
- 2.地址改变
- 【必须使用原本存储空间的首地址的指针变量,接受 realloc 返回值】
- */
- p = (int *)realloc(p, 60);
-
- printf("p = %p\n", p);
-
- for (int i = 0; i < 15; i++)
- {
- printf("*(p + %d) = %d\n", i, *(p + i));
- }
-
- free(p);
- p = NULL;
- return 0;
- }
-
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cstdio>
-
- using namespace std;
-
- int main(int argc, char const *argv[])
- {
- //C语言 calloc 申请内存空间
- int *arr = (int *)calloc(10, sizeof(int));
-
- //释放函数
- free(arr);
- arr = NULL;
-
- //C++ 内存申请空间, 数据类型 变量名 = new 数据类型
- int *new_arr = new int[10];
- //进行擦除操作,避免野值问题
- memset(new_arr,0,sizeof(int));
-
- for (int i = 0; i < 10; i++)
- {
- new_arr[i] = i*2;
- }
-
- for (int i = 0; i < 10; i++)
- {
- cout << "new_arr[" << i << "]" << new_arr[i] << endl;
- }
-
- delete new_arr;
- return 0;
- }
-
今天的分享到此结束啦!! 我们下期再见!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。