动态内存分配

来源:互联网 发布:face nginx 编辑:程序博客网 时间:2024/06/13 23:43
```    //void test(){//    int b = 7;//    static int a  = 3;//    a++;//    b++;//    printf("a = %d , b = %d\n", a, b);//}typedef struct student {    int num;    char name[20];}Student;void *fun(){    char string[] = "adjid";    return string;   //string 是局部变量  返回就错了   所以禁止这么返回}char fun1(){    return 'c';}int main(int argc, const char * argv[]) {    char *ret = fun();    char ret1 = fun1();    printf(" %c",ret1);    只读  coust    const int a = 0;    a = 3;  //这时就错了     static 静态   将局部变量  不被释放    test();    test();      malloc()    作用 : 在内存中开辟一块空间    参数 : 开辟空间的大小(单位  :字节)    返回值: 开辟空间的首地址    int *p = malloc(4);    int *p = malloc(sizeof(int));    *p = 3;    printf("%d \n", *p);    int *p = malloc(sizeof(int) * 3);    *p = 10;    *(p + 1) = 11;    *(p + 2) = 12;    for (int  i = 0; i < 3; i++) {        printf("%d ", *(p + i));         printf("%d ", p[i]);    }    从键盘输入字符串,将字符串中的数字挑出来存到另一个数组    char src[20] = {0};    char des[20] = {0};    int j = 0;    printf("输入:");    scanf("%s", src);    for (int i = 0; i < strlen(src); i++) {        if ( src[i] >= '0' && src[i] <= '9') {            des[j] =  src[i];            j++;        }    }        printf("%s", des);    1.开辟一个空间,存一个double类型的值,并打印    double a = 2.432;    printf("%f \n", a);    2.开辟一个空间,存 8double类型的值,并打印每个元素    double *p = malloc(sizeof(double) * 8);    double val[8] = {12.12, 23.44, 43.6, 431.3, 674.34, 5.2, 34.34, 34.645};    p = val;    for (int i = 0; i < 8; i++) {        printf(" %f ",*p++);    }    3.开辟一个空间,存一个结构体(student)类型的值(为每个成员赋值),并打印    Student stu = {111,"aaa"};    printf(" %d  %s", stu.num, stu.name);    4.开辟一个空间,存 3 个结构体(student)类型的值(为每个成员赋值),并打印    Student stu[3] = {{111,"aaa"},                      {222,"bbb"},                      {333,"ccc"}};    for (int i = 0; i < 3; i++) {        printf(" %d  %s\n", stu[i].num, stu[i].name);    }    输入3个单词,动态分配内存保存单词,并在最后输出    char temp[20] = {0};    char *words[3] = {NULL};    for (int i = 0; i < 3; i++) {        scanf("%s", temp);        //计算输入的单词长度        long len = strlen(temp);        //开辟空间        words[i] = malloc(sizeof(char) * (len + 1));        //存储到开辟的空间中        strcpy(words[i], temp);    }    for (int i = 0; i < 3; i++) {        printf("%s\n", words[i]);    }    //释放空间    for (int i = 0;i < 3 ; i++) {        free(words[i]);    }    int a = 0;                       int *p = malloc(sizeof(int ));    1.可以通过名字和地址访问             只能通过地址访问    2.在编写代码是限定好大小             可以在执行时动态分配大小    3.生存周期结束后系统自动释放          只能手动释放    4.两次连续定义,地址连续             不一定连续    5.栈区 -开辟小空间                  堆区- 大空间    int a = 0 ;    printf("栈  区:%p\n",&a);    int *p = malloc(sizeof(int));    printf("堆  区:%p\n",p);    static int b = 0;    printf("静态区:%p\n",&b);    char *s = "adads";    printf("常量区:%p\n", s);    printf("代码区:%p", fun);    / 动态内存分配方式    // 目的:用一个正好的数组去存挑出的数字    char src[100] = {0};    int num = 0;    scanf("%s", src);    // 1, 先查出数字个数    for (int i = 0; i < strlen(src); i++) {        if (src[i] >= '0' && src[i] <= '9') {            num++;        }    }    // 2, 动态开辟一段空间, 并为\0多预留一个空间    char *p = malloc(sizeof(char) * (num + 1));    // 保存空间的首地址    char *head = p;    // 3, 存数字    for (int i = 0; i < strlen(src); i++) {        // 判断, 若为数字        if (src[i] >= '0' && src[i] <= '9') {            *p = src[i];            p++;        }    }    *p = '\0';    printf("%s\n", head);    周游老师  16:05:10    1, 开辟一个空间, 存一个double类型的值, 并打印    double *p = malloc(sizeof(double));    *p = 5.5;    printf("%.1f\n", *p);    2, 开辟一个空间, 存8double类型的值, 并打印每一个元素    double *p = malloc(sizeof(double) * 8);    for (int i = 0; i < 8; i++) {        *(p + i) = 100.0 / (i + 1);        printf("%.1f ", p[i]);    }    3, 开辟一个空间, 存1个结构体(student)类型的值(为每一个成员赋值), 并打印    Student *p = malloc(sizeof(Student));    p->num = 1;    p->sex = 'm';    p->score = 99.9;    strcpy(p->name, "superMan");    printf("%d %s %c %.1f\n", p->num, p->name, p->sex, p->score);    4, 开辟一个空间, 存3个结构体(student)类型的值(为每一个成员赋值), 并打印    Student *p = malloc(sizeof(Student) * 3);    for (int i = 0; i < 3; i++) {        (p + i)->num = i;        (p + i)->sex = 'm';        (p + i)->score = 99.9 - i;        strcpy((p + i)->name, "superMan");        printf("%d %s %c %.1f\n", (p + i)->num, (p + i)->name, (p + i)->sex, (p + i)->score);    }

“`

0 0
原创粉丝点击