zoukankan      html  css  js  c++  java
  • C++学习笔记(三):数组

    数组声明时必须指定该数组的长度:

    1 int a[20];

    这个时候已经分配了内存,但没有初始化,所以具体的值是不确定的;

    初始化:

    1 int a[3] = {1, 2, 3};
    2 int a[3] = {1};//指定第一个数字为1,后面的使用0填充;
    3 int a[100] = {0};//指定所有的元素都是用0填充;

    标准方式:

    1 int a[100];

    数据保存在栈内存中,在声明时会分配内存,在其作用域结束时会由系统自动释放,不需要额外处理;

    指针方式:

    1 int* value = new int[100];

    数据保存在堆内存中,该内存块会一直存在,就算程序关闭也会继续存在,需要手动释放该内存;

    1 delete []value;

    二维数组初始化:

     1 int value[9][9]; // value[i][j]的值不定,没有初始化
     2 int value[9][9] = {{1,1},{2}}; //value[0][0,1]和value[1][0]的值初始化,其他初始化为0
     3 
     4 int (*value)[n] = new int[m][n];
     5 delete []value; // n必须为常量,调用直观。未初始化
     6 int** value = new int* [m];
     7 for(i) value[i] = new int[n];
     8 for(i) delete []value[i];
     9 delete []value; // 多次析构,存储麻烦,未初始化
    10 
    11 int * value = new int[3][4]; // 数组的存储是按行存储的
    12 delete []value; // 一定要进行内存释放,否则会造成内存泄露

    多维数组初始化:

    1 int * value = new int[m][3][4]; // 只有第一维可以是变量,其他几维必须都是常量,否则会报错
    2 delete []value; // 一定要进行内存释放,否则会造成内存泄露

    数组初始化的大括号后面要加“;”来表示结束。

    多维数组在内存中存储时是按照最低维连续的格式存储的,如二维数组{{1,2},{3,4}}在内存中的位置是这样顺序的“1,3,2,4”

    数组访问:

    1 value[i][j];
    2 *(value[i] + j);//指针形式
    3 (*(value + i))[j];//指针形式

    数组作为参数传递:

    1 //一维数组
    2 void Func(int *value);
    3 void Func(int value[]);
    4 
    5 //二维数组
    6 //定义是 int **value;的传递
    7 void Func(int **value);
    8 //定义是 int (*value)[n] = new int[m][n];的传递
    9 void func(int (*value)[n]);
  • 相关阅读:
    扯蛋的密码规则
    【转】mysql安全基线设置
    阿里云安全基线 记录如下 不定时更新
    解决Apache的错误日志巨大的问题以及关闭Apache web日志记录
    cms如何绑定二级域名
    宝塔面板定时/同步备份网站及数据库至FTP存储空间完整教程
    宝塔部署项目报Warning: require(): open_basedir restriction in effect的解决方案
    git学习笔记(一)—— git环境搭建
    vim学习笔记(一)—— vim安装方法
    Intel Edison学习笔记(二)—— 入门环境配置
  • 原文地址:https://www.cnblogs.com/hammerc/p/3937356.html
Copyright © 2011-2022 走看看