1 静态开辟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include <stdio.h> #include <unistd.h> // 小写的
void staticAction() { int arr[5];
for (int i = 0; i <5; ++i) { arr[i] = i; printf("%d, %p\n", *(arr + i), arr + i); } }
int mainT3() {
int arr[(int)(0.2 * 1024 * 1024)];
while (9) { sleep(100); staticAction(); }
return (0); }
|
2 动态开辟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <stdio.h> #include <stdlib.h> #include <unistd.h> // 小写的
void dynamicAction() { int * p;
int * arr = malloc(1 * 1024 * 1024);
printf("dynamicAction函数,arr自己的内存地址:%p,堆区开辟的内存地址:%p\n", &arr, arr);
free(arr); arr = NULL;
printf("dynamicAction函数2 堆区开辟的内存地址:%p\n", arr); }
int main() { dynamicAction(); return 0; }
|
3 动态开辟的使用的场景
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <stdio.h> #include <stdlib.h>
int mainT2() {
int num; printf("请输入数的个数:");
scanf("%d", &num);
int * arr = malloc(sizeof(int) * num);
int print_num; for (int i = 0; i < num; ++i) { printf("请输入第%d个的值:", i);
scanf("%d", &print_num);
arr[i] = print_num; printf("每个元素的值:%d, 每个元素的地址:%p\n", *(arr + i), arr + i); }
for (int i = 0; i < num; ++i) { printf("输出元素结果是:%d\n", arr[i]); }
getchar(); return 0; }
|
4 动态开辟之realloc
需要再次修改内存空间的大小的场景使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| #include <stdio.h> #include <stdlib.h>
int main() {
int num; printf("请输入个数"); scanf("%d", &num);
int * arr = (int *) malloc(sizeof(int) * num); for (int i = 0; i < num; ++i) { arr[i] = (i + 10001); } printf("开辟的内存指针: %p\n", arr);
int new_num; printf("请输入新增加的个数"); scanf("%d", &new_num);
int * new_arr = (int *) realloc(arr, sizeof(int) * (num + new_num));
if (new_arr) { int j = num; for (; j < (num + new_num); j++) { arr[j] = (j + 10001); }
printf("新 开辟的内存指针: %p\n", new_arr);
for (int i = 0; i < (num + new_num); ++i) { printf("新 元素的值:%d, 元素的地址:%p\n", *(arr + i), (arr + i) ); } }
free(new_arr); new_arr = NULL;
if (new_arr) { free(new_arr); new_arr = NULL; arr = NULL; } else { free(arr); arr = NULL; }
return 0; }
|
版权声明: 此文章版权归Jack Ou所有,如有转载,请註明来自原作者