• C语言动态申请一维数组 二维数组


    C语言动态申请一维数组

    首先  添加 

    #include <stdio.h>
    #include <stdlib.h>

    int *a;
    int N;
    scanf("%d", &N);
    a = (int *) malloc(N * sizeof(int));
    ....
    free(a);

    这样就动态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。


    验证一下:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int i = 0;

    int *a;
    int N;

    printf("Input array length: ");
    scanf("%d", &N);
    printf(" ");

    a = (int *) malloc(N * sizeof(int));

    for(i = 0; i < N; i++)
    {
    a[i] = i + 1;

    printf("%-5d", a[i]);
    if ((i + 1) % 10 == 0)
    printf(" ");
    }

    free(a);

    printf(" ");
    return 0;
    }

    C语言动态申请二维数组

    一、利用一个二级指针来实现

    思路:二级指针的使用类似于二维数组名的使用

    #include<stdio.h>
    #include<malloc.h>
     
    int main()
    {
        //5行2列的数组
        int **p = (int **)malloc(sizeof(int *) * 5);
        for (int i = 0; i < 5; ++i)
        {
            p[i] = (int *)malloc(sizeof(int) * 2);
        }
        for (int i = 0; i < 5; ++i)
        {
            for (int j = 0; j < 2; ++j)
            {
                //输出数组每个元素地址
                printf("%p
    ", &p[i][j]);
            }
        }
        for (int i = 0; i < 5; ++i)
            free(p[i]);
        free(p);
        return 0;
    }

    二、利用数组指针来实现

    数组指针和指针数组是不同的。数组指针是指针变量,其本质仍然是一个变量。指针数组其本质是一个数组,存放的元素类型是指针类型。

    就算很了解它们之间的区别,时间长了,在定义的时候还是容易混淆。运算符的优先级也是很重要的。()> [] > *。牢记于心。

    #include<stdio.h>
    #include<malloc.h>
    int main()
    {
     
        //申请一个5行2列的整型数组
        int(*p)[2] = (int(*)[2])malloc(sizeof(int) * 5 * 2);
        for (int i = 0; i < 5; ++i)
        {
            for (int j = 0; j < 2; ++j)
            {
                //输出数组每个元素地址
                printf("%p
    ", &p[i][j]);
            }
        }
        free(p);
        return 0;
    }

    三、利用一维数组来模拟二维数组

    #include<stdio.h>
    #include<malloc.h>
    int main()
    {
        int *p = (int *)malloc(sizeof(int) * 5 * 2);
        for (int i = 0; i < 5; ++i)
        {
            for (int j = 0; j < 2; ++j)
            {
                //输出数组每个元素地址
                printf("%p
    ", &p[i*2+j]);
            }
        }

    free(p);
    return 0; }
  • 相关阅读:
    Redis实战之Redis + Jedis[转]
    FastDFS、nginx配置手记
    服务器后端开发系列——《实战FastDFS分布式文件系统》[转]
    FastDFS分布文件系统[转]
    在XMPP的JAVA开源实现Openfire中,增加LBS 附近的人功能
    FASTDFS 5X安装
    助力互联网创业融资
    lucene索引并搜索mysql数据库[转]
    ZooKeeper监控
    光驱在资源管理器显示黄色感叹号的解决方法BIOS内有 系统下没有
  • 原文地址:https://www.cnblogs.com/mrguoguo/p/13858681.html
Copyright © 2020-2023  润新知