项目中用到,随手记一下:

1.二维数组、与指针

创建二维数组指针的方式:

a.已知一维的大小

  1. 1 int **array=new int *[rows];
  2. 2 (for int i=0;i<rows;i++)
  3. 3 array[i]=new int[colums];

释放指针方式

  1. 1 for(int i=0;i<rows;i++)
  2. 2 delete array[i];
  3. 3 delete []array;

b.两维都未知:

  1. char **a;
  2. a = new char* [m];
  3. a[] = new char[m * n];//一次性分配所有空间
  4. for(int i=; i<m; i++)
  5. {
  6. a[i] = a[i-] + n;//分配每个指针所指向的数组
  7. }
  8. printf("%d\n", sizeof(a));//4,指针
  9. printf("%d\n", sizeof(a[]));//4,指针
  10. delete[] a[];
  11. delete[] a;

对象 数组、对象指针的使用

  1. Date date[N];
  2.  
  3. Date *p=date;//指向对象数组第一个位置的指针

参考连接:http://www.xuebuyuan.com/3183755.html

通过引用来传递数组

数组形参可以声明为数组的引用,如果形参是数组的引用,编译器不会把数组实参转化为指针,而是传递数组本身,这种情况下,数组大小成为形参和实参类型的一部分,编译器会检查数组的大小。

  1. void printArr(int (&a)[]) { /* ... */ }
  2. int main(){
  3. int i = , j[] = {,}, k[] = {};
  4. printArr(&i); // error!
  5. printArr(j); //error!
  6. printArr(k); // ok!
  7. return ;
  8. }

会严格检查数组的大小。

二级指针、与指针作为函数参数:

指针传参,虽然形参和实参会指向同样的内容,但是两个在内存中都会被分配地址,在用到二级指针时,若指向该指针的二级指针会出现不同结果。

  1. void func(int *p)
  2. {
  3. cout<<"func:&p="<<&p<<",p="<<p<<endl; //note:3
  4. p = &b;
  5. cout<<"func:&p="<<&p<<",p="<<p<<endl; //note:4
  6. }

在调用func函数时

  1. int a=;b=;
  2. *q=a;
  3. func(q);

q和p在内存中的地址是不同的,虽然二者刚开始都指向a,创建了一个副本;在执行p=&b之后;q的地址还是指向a;而p指向b;

编译器使 p = q(但是&p != &q,也就是他们并不在同一块内存地址,只是他们的内容一样,都是a的地址)。如果函数体内的程序修改了p的内容(比如在这里它指向b)。在本例中,p申请了新的内存,只是把 p所指的内存地址改变了(变成了b的地址,但是q指向的内存地址没有影响),所以在这里并不影响函数外的指针q。

C++二维数组、指针、对象数组、对象指针的更多相关文章

  1. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  2. Qt信号槽机制的实现(面试的感悟,猜测每一个类保存的一个信号和槽的二维表,实际使用函数指针 元对象 还有类型安全的检查设定等等)

    因为面试时问了我这道题,导致我想去了解信号槽到底是如何实现的,于是贴着顺序看了下源码,大致了解了整个框架.网上关于信号槽的文章也很多,但是大部分都是将如何应用的,这里我就写一下我所理解的如何实现吧, ...

  3. poj3067 二维偏序树状数组

    题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring ...

  4. hdu1081 DP类最大子段和(二维压缩+前缀和数组/树状数组计数)

    题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j) ...

  5. 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus

    Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...

  6. $[SHOI2007]$ 园丁的烦恼 二维数点/树状数组

    \(Sol\) 设一个矩阵的左上角为\((x_1,y_1)\),右下角为\((x_2,y_2)\),\(s_{x,y}\)是到\((1,1)\)二维前缀和,那么这个矩阵的答案显然是\(s_{x_2,y ...

  7. 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 树状数组套树状数组真心没用QAQ....首先它不能修改..而不修改的可以用单调队列做掉,而且更 ...

  8. C. Arcade dp二维费用背包 + 滚动数组 玄学

    http://codeforces.com/gym/101257/problem/C 询问从左上角走到右下角,每次只能向右或者向左,捡起三种物品算作一个logo,求最多能得到多少个logo. 设dp[ ...

  9. java 二维数组和对象数组

    1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组 2.二维数组的初始化 1) int intA[][]={{1,2},{2,3},{3,4,5}}; 2) int [][] intB=n ...

  10. c++ 依据输入动态声明数组(一维,二维)

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

随机推荐

  1. Unity3D制作红色射线

    1.在发射射线的位置创建一个空物体用于存储发射点的位置信息. 2.制作射线,为发射射线物体添加LineRenderer组件  制作Material材质并把其类型改为Particles/Addictiv ...

  2. 编码原则 之 Stable Dependencies

    The Stable Dependencies Principle states that “The dependencies between software packages should be ...

  3. Java的异常机制

    Java的异常机制 (一)异常的概念 异常是指程序在编译或运行时出现的导致程序不能继续编译或运行的状况.. (二)Throwable类 Throwable类继承自Object类,是Java中所有错误或 ...

  4. 区别samtools faid产生的.fai文件功能和bwa index 产生的四个文件的功能

    samtools faidx 能够对fasta 序列建立一个后缀为.fai 的文件,根据这个.fai 文件和原始的fastsa文件, 能够快速的提取任意区域的序列 用法: samtools faidx ...

  5. MySQL及navicat for mysql中文乱码

    转载自:https://www.cnblogs.com/mufire/p/6697994.html 修改完之后记着重启mysql服务,在服务里边重启,即可生效! 全部使用utf8编码 MySQL中文乱 ...

  6. python识别图片

    import requestsfrom aip import AipOcr image = requests.get('https://static.pandateacher.com/7b5d6d8d ...

  7. python2和python3的range(100)的区别

    python2返回列表,python3返回迭代器,节约内存

  8. (完美)华为Mate8 NXT-TL00的USB调试模式在哪里开启的经验

    每当我们使用pc通过数据线连接上安卓手机的时候,如果手机没有开启usb调试模式,pc则没法成功检测到我们的手机,在一些情况下,我们使用的一些功能比较强的的软件如以前我们使用的一个软件引号精灵,老版本就 ...

  9. (转)关于request.getServletPath(),request.getContextPath()的总结

    文章完全转载自 : https://blog.csdn.net/qq_27770257/article/details/79438987 最近对于request中的几种“路径”有点混淆,查找网上资源都 ...

  10. postgresql 空间函数 随笔

    1. ST_Buffer(geometry, double, [integer])buffer操作一个很有用函数,这个函数的第一个参数是要操作的空间几何数据,第二个参数长度(距离),第三个参数为一个整 ...