`
lizhuohuang
  • 浏览: 117397 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++中一维数组与二维数组的手动调用

    博客分类:
  • C++
 
阅读更多
C++中一维数组与二维数组的手动调用
2013-03-04 13:44:06          作者:mig_davidli

在平时做项目的过程中或者C++学习的时候,开数组大家都会,但是对指针不熟练的人还是会对数组的原理表示不明,经常出现内存调用的BUG。

下边讲解一下人工开数组,众所周知,在C++中,数组的本质是指针(老师们应该都是这么教学的)。但是各位究竟对数组的指针操作了解多少?
一、数组的指针是const *T,不能直接修改地址.
下边
[cpp]  
int intArray[10];  
intArray++;  
 
是不对的。
但是有例外,那就是数组当做函数的形参的时候。
(1)数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针;
(2)很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
而我们这样使用的话:
[cpp]  
double *x=new double [10];  
x++;  
 
是不会报错的,指针会正常进行移位。手动开数组的话也可以用[]下标进行操作,也就是说,用new的话更加自由,当然出错几率更大。没记错的话 java好像就这样声明数组的。
[cpp]  
#include <iostream>  
using namespace std;  
  
int a[10]={1,2,3,4,5,6,7,8,9,10};  
   
int main()  
{  
    int *c=new int[10];  
    c[0]=1;  
    c[1]=2;  
    c[2]=3;  
    cout<<c++<<endl;  
    cout<<*(c++)<<endl;  
}  
new来的空间是不会释放的,最后应该delete操作释放。
二维数组的话
[cpp]  
int **x; //为什么是两个星号,因为在计算机中第一维中存的还是内存地址,内存地址指向另一个一维数组,二维数组本质上相当于两个一维数组相乘。  
x=new int * [10];//第一维本质是指针  
for(int i=0;i<10;i++)  
x[i]=new int [10];  
//二维数组其实是这么来的  
 
释放的话也要与之对应
[cpp]  
for(int i=0;i<10;i++)  
    delete  []x[i];  //删除行的指针  
delete []x;  
x=0;  
 
如果手动开内存太多不释放,内存不足的话,系统会开出bad_alloc异常,可以catch到。
今天大概就学到了这么多。。最后说一个常识,sizeof()是运算符,绝对不是函数。
分享到:
评论

相关推荐

    c++return返回二维数组

    在c++中,经常调用函数,而子函数经常要返回的值是数组,无论一维数组还是二维数组都需要运用到指针的知识。一维数组不再过多叙述,给了一个实例如何返回二维数组,希望对大家有帮助(主要用到指针的知识,看不懂的...

    编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为:

    编写一个在具有m行n列的二维数组各元素中找出最大元和最小元并显示在屏幕上的函数模板,并通过主函数对它进行调用以验证其正确性。例如,可设计该函数模板的原型为: template &lt;class Type&gt; void maxMin (Type *A,...

    动态定义一维、二维、三维数组

    动态定义一维、二维、三维数组,里面有代码,可以仿照的 呵呵

    VC将二维数组显示为图像

    将二维数组传递给本函数,本函数会将数组显示为图像。注意数组传递前需先转换为char型。 图像显示是windows编程的基础,本程序可作为一个子函数用于调用,可同时显示多张图像。

    python调用c++ ctype list传数组或者返回数组的方法

    今天小编就为大家分享一篇python调用c++ ctype list传数组或者返回数组的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    对一个二维数组进行Zig-Zag方式扫描(C++,包含一个自已实现的类)

    对一个二维数组进行Zig-Zag方式扫描,其中二维数组是动态分配空间和赋值的。包含一个自己实现的类,可以直接供外部程序调用。

    C++函数和数组

    1.掌握函数的定义和使用方法;掌握函数调用的方法;掌握函数参数传递的机制;...2.熟练掌握一维数组和二维数组的定义、引用和初始化;掌握字符数组与字符串的关系以及字符串变量的表示,熟练字符串处理函数的应用。

    Lily_halcon.cpp

    重点::将HTuple类型的属相数据转为C++中熟悉的二维数组array[n][m],方便后续对数组进一步处理。(其中包含Halcon数据类型到C++中int转换(double,char同理的)、动态创建数组、释放数组内存)**需要有Halcon和C++...

    指针数组和数组指针的区别.doc

    这样两者的区别就豁然开朗了,数组指针只是一个指针变量,似乎是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。指针数组是多个指针变量,以数组形式存在内存当中,占有多个指针的存储空间。 还...

    二维计算几何库(C++源码)

    二维计算几何整合而成的一个库,涵盖了点线面圆之间的各种关系求解,一般计算几何问题直接调用函数就可以解决,每个函数都有功能注释。

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    7.1.2 一维数组元素的引用 83 7.1.3 一维数组的初始化 84 7.1.4 一维数组程序举例 84 7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组...

    现代C++程序设计

    6.6.2 白雪公主:利用二维数组来存储姓名 6.7 利用数据文件对数组赋值 6.8 总结 6.9 练习 复习题 第7章 类和对象 7.1 我们所了解的类和对象 7.2 编写自己的类 7.2.1 入门实例:自定义日期类 7.2.2 第一个C++类:...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    7.1.2 一维数组元素的引用 83 7.1.3 一维数组的初始化 84 7.1.4 一维数组程序举例 84 7.2 二维数组的定义和引用 86 7.2.1 二维数组的定义 86 7.2.2 二维数组元素的引用 86 7.2.3 二维数组的初始化 87 7.2.4 二维数组...

    2d_spline_cpp:C++ 的二维样条插值

    Personnaly 我使用 2d 样条和微分方程求解器,它需要在单个点重复样条评估,但可能在 (x,y) 处评估样条,其中 x 和 y 是数组,只需调用一次 fortran 子程序。 您必须修改 scipy_spline_1d 和 sc

    【全新正版】现代C++程序设计(原书第2版)

    6.6.2 白雪公主:利用二维数组来存储姓名 6.7 利用数据文件对数组赋值 6.8 总结 6.9 练习 复习题 第7章 类和对象 7.1 我们所了解的类和对象 7.2 编写自己的类 7.2.1 入门实例:自定义日期类 7.2.2 第一个C++类:Date...

    谭浩强 入门c语言教程

    7.1.2 一维数组元素的引用 2 7.1.3 一维数组的初始化 4 7.1.4 一维数组程序举例 4 7.2 二维数组的定义和引用 6 7.2.1 二维数组的定义 6 7.2.2 二维数组元素的引用 6 7.2.3 二维数组的初始化 7 7.2.4 二维数组程序...

    C程序设计(第四版)学习辅导【谭浩强】

    6.1怎样定义和引用一维数组143 6.1.1怎样定义一维数组144 6.1.2怎样引用一维数组元素145 6.1.3一维数组的初始化146 6.1.4一维数组程序举例147 6.2怎样定义和引用二维数组149 6.2.1怎样定义二维数组150 6.2.2怎样引用...

    清华大学计算机课程之《C++程序设计》

    - 第二节 二维数组 - 第三节 字符数组 - 第四节 数组作函数参数 - 第五节 程序举例 - 本章小结 - 课后习题 ◇ 第七章 指针与引用 - 课前索引 - 第一节 指针变量的定义与使用 - 第二节 动态内存分配 - 第三...

    基于Python+C++的二维碎片图像拼接复原系统.zip

    全部用 C++ 和 opencv 实现,用 Python 实现,其功能包含,网页爬虫获取图像素材,随机切分得到一系列碎片调用底层 C++ 实现的核心模块拼接复原图像,最后包含对拼接结果的测试程序。 PyQt5 设计具有良好的用户交互...

Global site tag (gtag.js) - Google Analytics