内存动态分配
动态内存分配与数组
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
| #include<stdio.h> #include<malloc.h> int main() { int* score; int i; int stu_num = 5; int sum; float ave; score = (int*)malloc(stu_num * sizeof(int)); for (i = 0; i < stu_num; i++) { scanf("%d", &score[i]); } for (i = 0; i < stu_num; i++) { printf("%d ",score[i]); } printf("\n"); for (i = 0; i < stu_num; i++) { printf("%d ", *(score+i)); } return 0; }
|
创建未知大小的数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int main() { int* score; int stu_num;
scanf("%d", &stu_num);
score = (int*)malloc(stu_num * sizeof(int));
for (i = 0; i < stu_num; i++) { scanf("%d", &score[i]); } }
|
创建结构体数组
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
| #include<stdio.h> #include<malloc.h>
struct STU { char id[20]; int maths; int eng; int chi; };
int main() { struct STU* stu;
int num; scanf("%d", &num);
stu = (struct STU*)malloc(num * sizeof(struct STU));
for (int i = 0; i < num; i++) { gets(stu[i].id); scanf("%d", &stu[i].maths); scanf("%d", &stu[i].chi); scanf("%d", &stu[i].eng); }
for (int i = 0; i < num; i++) { printf("%s %d %d %d\n", stu[i].id , stu[i].maths, stu[i].chi, stu[i].eng); }
}
|
理解gets()
前面需要getchar()
理解为scanf
会获取确认按钮'\n'
之前的所有内容。
留下一个'\n'
在输入缓冲区(stdin)中,会被gets获取到,而gets()
会获取包括\n
的所有字符。
free()
malloc函数在使用完之后没有将空间返还给系统。free函数可以将内存空间在下一次调用malloc函数之前重新分配。
使用方法:
1 2 3 4 5 6 7 8
| int main() { float* p = (float*)malloc(sizeof(float)); *p = 3.14; printf("%g",*p); free(p); return 0; }
|