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;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章