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...