#include <stdio.h> #include <stdlib.h> #include <malloc.h> //包含头文件 main(){ int i = 3;//栈中 int arr[10];//栈中 int* p = malloc(sizeof(int) * 10);//p在栈中,malloc在堆里面长度为10个整型,malloc出来的内存是连续的。 *p = 10; *(p+1) = 20; printf("%#x ", p);//0x3e3cf0 printf("%d ", *p);//10 printf("%d ", *(p+1));//20 printf("%d ", p+1);//4078836 printf("%d ", *(p+2));//0 printf("%d ", *(p+3));//0 free(p); system("pause"); } #include <stdio.h> #include <stdlib.h> main(){ int i = 3; int* p = &i; int** q = &p; int*** l = &q; printf("i的值为%d ", ***l);//3 //l表示取出l内存空间的值,*l表示取出l内存空间值的内存空间的值,**l表示取出l内存空间值的内存空间值的内存空间的值。 system("pause"); }
#include <stdio.h> #include <stdlib.h> #include <malloc.h> main(){ printf("请输入学生人数:"); int count; scanf("%d", &count); //int b在C中是系统在栈中申请内存,系统负责回收的。 // malloc申请的是堆内存由程序员释放。 //栈内存只有2M,连续的内存空间,先进来的后释放。 堆的内存和物理内存一样大, //堆不连续是用链表表示的,链表查找比连续的麻烦但是增删比连续的快。 //C是面向过程的没有对象概念所以没有new,malloc就是new。 //静态内存是栈上分配的,编译的时候就已经分配好了,程序的怎个运行期间都存在, //例如全局变量和static变量。动态内存是堆上malloc或者new分配的。 //根据学生人数去动态申请堆内存 , int* p = malloc(sizeof(int) * count);//count个int类型 int i; for(i = 0; i < count; i++){ printf("请输入第%d个学生学号:", i); scanf("%d", p+i); } printf("请输入新增的学生人数:"); int newCount; scanf("%d", &newCount); p = realloc(p, sizeof(int) * (count + newCount));//扩充p内存 for(i = count; i < count + newCount; i++){ printf("请输入第%d个学生学号:", i); scanf("%d", p+i); } for(i = 0; i < count + newCount; i++){ printf("第%d个学生的学号是:%d ", i, *(p+i)); } system("pause"); }