Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将指向数组元素的指针传递给函数_Javascript - Fatal编程技术网

Javascript 将指向数组元素的指针传递给函数

Javascript 将指向数组元素的指针传递给函数,javascript,Javascript,我正在为线性代数中的一项任务编写一个程序,该程序对浮点数的向量和矩阵进行计算 i、 e 程序的一部分对输入向量执行相同的操作,就像在输入矩阵的指定行上一样,由C++中的函数处理。在C++中,同一函数可以接受向量或矩阵的输入,只要它接受指向特定数组元素的指针;只要指针算法是细致的,并且知道内存布局是以行为主的,它就可以工作。我想知道JavaScript是否也能做到这一点 我可以编写两个函数中的任意一个: i) 需要向量的函数。 在works中传递向量。 但是,传递矩阵不起作用。 我希望传入指针,比

我正在为线性代数中的一项任务编写一个程序,该程序对浮点数的向量和矩阵进行计算

i、 e

程序的一部分对输入向量执行相同的操作,就像在输入矩阵的指定行上一样,由C++中的函数处理。在C++中,同一函数可以接受向量或矩阵的输入,只要它接受指向特定数组元素的指针;只要指针算法是细致的,并且知道内存布局是以行为主的,它就可以工作。我想知道JavaScript是否也能做到这一点

我可以编写两个函数中的任意一个:

i) 需要向量的函数。
在works中传递向量。
但是,传递矩阵不起作用。
我希望传入指针,比如说,第二行的第一个元素(包含6.789的元素)。然后通过类似于[0][i]的方式访问整行。但是JavaScript不喜欢这样

ii)需要矩阵的函数。
在工作中传递矩阵。
但是,传入向量不起作用。如果我尝试以v[0][I]的形式访问向量元素,JavaScript不喜欢这样

要么我的语法不正确,要么我正在尝试做一些无法完成的事情

向量和数组的形式不能改变(如展平等),因为程序的其余部分需要它们保持其形式;向量需要保持为向量,矩阵需要保持为矩阵

在JavaScript中,是否可以将指向特定数组元素的指针传递到函数中,然后在函数中将向量(或矩阵行)视为常规数组


如果没有,是否有建议的解决方法?

这是否符合您的要求

函数doSomethingWithVectorOrmatrix行(vectorOrMatrix,matrixRow){
常量向量=矩阵行===未定义?向量矩阵:向量矩阵[矩阵行];
返回剂量测定法(aVector);
}
/*使用它作为*/doSomethingWithVectorOrmatrix行(v);
/*或*/doSomethingWithVectorOrmatrix(A,1);


当然,将矩阵存储为平面
数组
,并简单地操作该
数组
的给定范围会更有效,这对向量(范围=整个向量)同样有效,但您说您不能更改所使用的数据结构。

您在Javascript中没有真正的指针。您始终可以将特定变量传递到函数中,执行计算,然后返回并将其合并回原始数组。这就是你想做的吗?@基诺,这是可能的。理想情况下,我的目标是编写一个函数,可以将矩阵或向量作为输入,而不会显著影响性能。谢谢。好建议。我想首先将矩阵创建为向量,并通过一维引用访问它会更容易。i、 例如,从概念上讲,A可能是一个NROWS x NCOLS 2D矩阵,另存为1D数组,并以[i*NCOLS+j]的形式访问元素A[i][j]。现在更改它将涉及重新编写大部分程序和许多其他子程序。如果你有时间,我仍然建议抽象出矩阵存储的数据结构,其精神是:你可以创建一个
类矩阵{get(I,j){}
,然后只需要更改
get
方法。您还可以添加
getRow(j)
方法,当然还有
set(i,j)
method我的意思是
set(i,j,v)
v = [3.14159, 2.256, 1.5783, 6.782]

A = [   9.7     2.333    5.467   5.2123
        6.789   4.789   5.671   9.111
        1.113   4.562   8.223   5.2125
        6.666   7.8181  3.426   4.3567]