C10-动态内存分配

一、存储区划分
二、堆内存分配函数
三、其他内存分配函数
四、内存操作函数

代码:

void test(void)
{
printf(“void\n”);
}

int main(int argc, const char * argv[]) {

// 存储区划分

// int a = 0;
// printf(“栈区:%p\n”, &a);
// // 堆区多占空间较大
// printf(“堆区:%p\n”, malloc(1));
//
// static int b = 0;
// printf(“静态区:%p\n”, &b);
//
// char *p = “iphone”;
// printf(“常量区:%p\n”, p);
//
// printf(“代码区:%p\n”, test);

// 堆内存操作函数

// 原型:void *malloc(unsigned int size);
// 作用:在堆内存中动态分配指定字节的空间

// int *p = malloc(1);
// int *q = malloc(1);
// *p = 5;
// *q = 65536;
// printf(“%d\n”, p *q);

// int *p = NULL;
// p = malloc(4);
// p = malloc(sizeof(int));

// char *p = NULL;
// p = malloc(4);
// // 通常写成sizeof(int)为了保证兼容性,防止跨平台后int类型大小可能不同
// // p = malloc(sizeof(int));
// *p = 256;
// printf(“%d\n”, *p);

// int *p = malloc(sizeof(int)*3);
// for (int i = 0; i < 3; i++) {
// p[i] = arc4random() % (20 - 10 + 1);
// }
// for (int i = 0; i < 2; i++) {
// for (int j = 0; j < 2 - i; j++) {
// if (p[j] > p[j + 1]) {
// int temp = p[j];
// p[j] = p[j + 1];
// p[j + 1] = temp;
// }
// }
// }
// for (int i = 0; i < 3; i++) {
// printf(“%d “, p[i]);
// }

// int a[3] = {0};
// for (int i = 0; i < 3; i++) {
// scanf(“%d “, &a[i]);
// }
// for (int i = 0; i < 3; i++) {
// printf(“%d “, a[i]);
// }
// printf(“\n”);

// int a = 0;
// printf(“请输入元素个数:”);
// scanf(“%d”, &a);
// // 开辟一段空间,可以存n个int类型数
// int p = malloc(sizeof(int) a);
// // 为每一个元素获取值
// for (int i = 0; i < a; i++) {
// printf(“请输入第%d个数:”, i);
// scanf(“%d”, &p[i]);
// }
// // 打印空间内的变量
// for (int j = 0; j < a; j++) {
// printf(“%d “, p[j]);
// }
//
// // 注意事项:
// // 1. 开辟的空间未经初始化
// // 2. free()
// // 释放堆内存空间
// // 与malloc配对使用
// free(p);

char a[10] = "abc123de4";
int sum = 0;
for (int i = 0; i < strlen(a); i++) {
    if (a[i] >= '0' && a[i] <= '9') {
        sum++;
        //printf("%c ", a[i]);
    }
}
printf("一共有%d个数字:\n", sum);
char *p = malloc(sizeof(char) * (sum + 1));
char *q = p;
for (int i = 0; i < strlen(a); i++) {
    if (a[i] >= '0' && a[i] <= '9') {
        *(p++) = a[i];
        printf("%c ", a[i]);
    }
}
*p = '\0';
printf("%s\n", q);
//for (int i = 0; i < sum; i++) {
//    printf("%c ", q[i]);
//}
free(q);



//char *names[3] = {"zhangsan", "lisi", "wangwu"};

// char *names[3] = {NULL};
// char name[10] = {0};
// printf(“请输入姓名:\n”);
// for (int i = 0; i < 3; i++) {
// scanf(“%s”, name);
// names[i] = malloc(sizeof(char) * (strlen(name) + 1));
// strcpy(names[i], name);
// //names[i] = name;
// }
// for (int i = 0; i < 3; i++) {
// printf(“%s “, names[i]);
// //free(names[i]);
// }

//void * calloc(unsigned n, unsigned size);
//作用:分配n个size大小的空间,并且把该内存上的所有字节清零。
//int *p = calloc(4, sizeof(int));

// 按给定的地址以及给定的大小重新分配
// 参数1:指定的地址
// 参数2:分配大小

// void *realloc(void *p, unsigned newSize);

// 从s指向的内存开始初始化n个字节的内容为c

// void *memset(void *s , int c , size_t n)

// int *p = malloc(sizeof(int));
// // 将从地址p开始处的4个字节全部设置成0
// memset(p, 0, 4);

// 从source指向的内存开始拷贝到dest,拷贝n个字节
// void *memcpy(void *dest, const void *sourceNotFoundErr, size_t n)

// 比较buf1和buf2指向的内存是否相同,比较count个字节
// int memcmp(const void *buf1, const void *buf2, unsigned int count)

// int a = malloc(sizeof(int) 3);
// int *b = calloc(3, sizeof(int));
// memset(a, 0, 3);
// for (int i = 0; i < 3; i++) {
// a[i] = arc4random() % 4;
// b[i] = arc4random() % (3 - 1 + 1) + 1;
// }
// if (0 == memcpy(a, b, 3)) {
// printf(“Good!”);
// } else {
// printf(“Failed…”);
// }

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值