问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

C/C++问题 这个动态生成二维数组的原理是什么??

发布网友 发布时间:2022-04-23 18:10

我来回答

5个回答

热心网友 时间:2023-10-12 09:09

首先,符号“ ** ”是指针的指针的意思 。int** a=new int* [x] 是定义一个指针指针对象a ,这个指针指向一个整形的指针数组(数组中装的也是指针),输入的整数x决定了这个指针数组的长度(也就是说这个数组中装了x个指针)。
假设输入的x=2,y=3;那么new int* [2]就是定义了一个长度为二的整形指针数组,**a就指向一个长度为2的数组的首地址。假如这个数组中的2个元素为 *p0,*p1,那么 a[0]=*p0,a[1]=*p1;根据你的程序的第一个循环,数组中的每个指针(*p0,*p1)又指向一个长度为3的整形数组。*p0指向一个长度为三的整形数组的首地址,假如这个三个整数为c0,c1,c2,那么p0[0]=c0, p0[1]=c1, p02]=c2;同理*p1也是如此;第二个双层循环就是指定c0,c1,c2···的值,第三个就是输出了。
你可以这么来理解更直观些:比如说定义了一个整形的二维数组(2x3)

*p0 指向第一行,*p1 指向第二行。假如有个数组 M[ ] ,它装的内容就是*p0,*p1,那么**a 就是指向数组 M[ ] 。

问题二:
这个问题是变量的局部性的问题
for(表达式1;表达式2;表达式3) { 循环体;} 这里的表达式1 是作用于你这里的整个函数的。而2,3才只是作用于这个局部循环的,再比如说
for( int i=0; i<10; i++)
{
for( int j=0; j<5; j++) // 这里的 j 作用于整个外层的循环
{ for( int k=0;k<3;k++) {} } // 这里的 k 只作用于此循环体内,对下面的那个不影响
for( int k=0; k<4; k++) { }
}
也就是说:如果两个变量的作用域相同,那么这两个变量的名称一定不能相同!
至于java为什么能行,我就不太清楚了,这个可能是java虚拟机在解释for循环的时候和C++不一样吧。

热心网友 时间:2023-10-12 09:10

1、生成一个长度为x的一维指针数组,数组元素是int*指针,每个指针又可以再指向一个一维int数组,这些就相当于生成了一个第一维度为x的二维数组。
2、这也是我一直很纠结的问题。根据教材或者大部分网上的文章所说的,在for里面定义的变量,作用域只是for的循环体,但在实际编程中,我发现在for里面定义的变量,作用域可以扩大到for语句本身所在的函数。或许JAVA严格控制了这一点吧。

热心网友 时间:2023-10-12 09:10

二维数组可以看做是一个一维数组,每个数组存的是一个指向一维数组的指针

热心网友 时间:2023-10-12 09:11

问题一:new是动态申请内存
问题二:int i是变量定义吧,定义只能定义一次!

热心网友 时间:2023-10-12 09:12

你好 一:你可以这样理解 int** a=new int* [x],首先定义了一个int型含有x个元素的数组,在x的每个元素哩保存的不是一般的数据而是其他数组的首地址,这样就形成了一个二维数组,然后再把x数组的首地址赋值给a,这样a就是一个二维数组了;不知道我说的你能不能听明白。
二:在c和c++中申明的变量如果不自己销毁的话,默认生存期是一直到程序结束的。在java里系统自动free掉不需要的变量,所以在你第二次申明时之前那个i其实已经不存在了,你可以在
for(int i=0;i<x;i++)
{
a[i]=new int[y];
}
System.out.print(i);
会发现“i cannot be resolved".
呵 希望可以帮助到你。
C语言中的数组什么意思?

所谓数组,是有序的元素序列。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。比如油烟机的风扇转速会和工作的模式之间有一定的关系,那么我们就可以把它的工作模式和一维数组的下标对应起来,我们将具体的转速放...

VC++与C++有什么区别和联系?

二、联系:C++是在C语言的基础上加入了“类”的概念以及“对象”的概念,所以C++是面向对象的编程语言。而VC++是在C++的基础上加入了对windows可视化(窗口化以及控件)操作的支持,所以它也是面向对象的编程语言。

vba中怎么选取二维数组中的某一行或某一列?

'为啥第0行变成了第2行?--因为你第一种显示数组只取了数组4*4中 3*3部分 'index 的序号默认都是从1开始,而非从0开始 '用index取出来的数组,index已经从1开始了 '工作表函数index ,match都是index从1开始,EXCEL本身 row column 都得从1开始 人活一辈子,就活一颗心,心好了,一切就都好...

VFP中如何用列表框显示一个二维数组的各个元素的值?

1.)你的这个LIST1的属性在设计时设置好的话使得当表单初始化时它就去找a这个数据源了,而你的a在点按钮之前还没产生,所以表单一出来先提示a不是一个数组。2.)dimension定义的是私有变量,你在按钮里定义的数组,在执行到THISFORM.LIST1.REQUERY之前数组a就消失了,所以LIST1里只剩下一杠杠的却没...

如何在c++定义一个学生类以实现平均成绩的计算和查询功能?

答案:C试题分析:考察乘法原理,第1,2位有5种选法(0,1,6,8,9),第三位有三种0,1,8,第4,5位由前两位决定,所以答案位5*5*3=75。14.假设一棵二叉树的后序遍历序列为 DGJHEBIFCA,中序遍历序列为 DBGEHJACIF,则其前序遍历序列为( )。A. ABCDEFGHIJ B. ABDEGHJCFIC. ABDEGJHCFI D. ABDEGHJFIC...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
孩子的冠姓权是怎么回事? 如何看待孩子冠姓权问题? 意定监护协议样本内容是什么? 自愿放弃监护权合同范本是怎样的? 放弃孩子监护权协议书怎么写? 自愿变更监护权协议书怎么写? 变更监护权协议书怎么写? 子女监护权变更协议范本是怎样的? 变更子女监护权协议书 宝诗龙Epure焦特普尔之蓝腕表:诠释极致经典 小孩子怎么才能当上明星? 农村孩子怎样成为明星? 发邮件怎么添加正文 怎样把自己的孩子培养成一个小明星 发送邮件,点击添加到正文就会显示文档被加密导入失败 3岁以上的孩子怎么才能成为明星 有没有输入脚本就可以自动生成二维动画的工具? 12岁的小女孩要怎么样才能当明星 在excel中以一行的数据为X轴,以另一行的数据为Y轴自动生成二维曲线图,谢谢了。 小孩怎样成为明星 编写程序,自动生成一个二维数组A(N,N),(N取8,元素值域[10,99]),分别计算出数组中 怎么样才可以当上明星? 用什么软件画三维图好,能自动生成二维图,还有组装图用什么软件好? 怎样才能当童星?? 编程自动生成如下二维数组并输出? 小孩儿怎么样才能当明星? 求一自动生成二维数组的算法,c编写 12岁的小女孩要怎么样才能当明星? 小学生怎样才能成为明星?需要什么? 一般家庭的孩子,怎么可以进入娱乐圈? 小孩子想当明星? 怎么把天正CAD的三维图转换成二维图,不是视图!!! 发邮箱用添加到正文吗为什么都不用? 儿童怎样才能成为明星? 可以利用3dsmax软件自动生成三维模型的二维三视图吗? 怎样从三维图转到二维图后,尺寸标注能自动生成? 二维码管理系统自动生成了22位编号,怎么把编号生成二维码图形 人眼看见的东西全都是二维的,为什么大脑会自动补脑成三维的呢? 为什么QQ发邮件的时候 文档获取失败 正文没有显示文件内容 是什么情 ... 写邮件的时候,选择把EXCEL添加到正文就提示:文档读取失败,记事本其他格 ... 主板常见故障有哪些 为什么qq邮件添加正文就读取失败呢 m.xue163.com 邮件主题添加不到正文怎么弄 如何判断电脑主板故障? 电脑主板突然坏了,一般是怎么回事导致的 银行卡被中金支付扣走很多钱,为什么会扣钱,请问怎么办? 电脑主板坏了是怎么造成的? 我的银行卡被中金支付有限转了1000多元钱是什么原因,请问怎么办?_百度... 主板故障开不了机 主板坏了怎么办?
  • 焦点

最新推荐

猜你喜欢

热门推荐