p*********9 发帖数: 277 | 1 不是c++.
我的函数 void myfun(int time, double A[6], double B[6][6]);
这个函数内面,我需要改变向量A[6]和矩阵B[6][6]的值,并返回他们.
上面的这个声明可以吗? 有什么建议阿?
谢谢. |
w***g 发帖数: 5958 | 2 上面这个声明可以. 建议是定义一个常数来代替赤裸裸的6.
【在 p*********9 的大作中提到】 : 不是c++. : 我的函数 void myfun(int time, double A[6], double B[6][6]); : 这个函数内面,我需要改变向量A[6]和矩阵B[6][6]的值,并返回他们. : 上面的这个声明可以吗? 有什么建议阿? : 谢谢.
|
p*********9 发帖数: 277 | 3 thanks.
【在 w***g 的大作中提到】 : 上面这个声明可以. 建议是定义一个常数来代替赤裸裸的6.
|
M7 发帖数: 219 | 4 C需要这个6吗?
C似乎只在乎是个指针而已。
【在 w***g 的大作中提到】 : 上面这个声明可以. 建议是定义一个常数来代替赤裸裸的6.
|
b******n 发帖数: 592 | 5 static array是需要的
【在 M7 的大作中提到】 : C需要这个6吗? : C似乎只在乎是个指针而已。
|
u****u 发帖数: 229 | 6 几问几答,漏洞百出.此楼可谓壮观.
【在 b******n 的大作中提到】 : static array是需要的
|
s**********o 发帖数: 197 | 7 比较同意这个观点。还不如给个pointer把A B还有6啥的一起传进去。
【在 M7 的大作中提到】 : C需要这个6吗? : C似乎只在乎是个指针而已。
|
t****t 发帖数: 6806 | 8 顶这个.
【在 u****u 的大作中提到】 : 几问几答,漏洞百出.此楼可谓壮观.
|
p*********9 发帖数: 277 | 9 谢谢回答.有些confusing
因为我定义的这几个矩阵都回定义成全局变量,所以我就用了这样的定义.
如果定义正下面的样子:
void myfun(int time, double *A, double **B)
有什么大的优势呢?毕竟这个矩阵都很小阿。 |
w***g 发帖数: 5958 | 10 你原来的声明是对的. double **B对你这种情况不如double B[6][6].
【在 p*********9 的大作中提到】 : 谢谢回答.有些confusing : 因为我定义的这几个矩阵都回定义成全局变量,所以我就用了这样的定义. : 如果定义正下面的样子: : void myfun(int time, double *A, double **B) : 有什么大的优势呢?毕竟这个矩阵都很小阿。
|
|
|
H***a 发帖数: 735 | 11 double **B won't work if LZ want it works like declaring B[6][6].
The following would work:
void myfun(int time, double A[6], double B[6][6])
void myfun(int time, double A[], double B[][6])
void myfun(int time, double *A, double (*B)[6])
Just take a look at http://www.ibiblio.org/pub/languages/fortran/append-c.html |
p*********9 发帖数: 277 | 12 thanks a lot. After the discussions, I will use
void myfun(int time, double A[6], double B[6][6])
It is easier for me to read and use the codes. |
n******t 发帖数: 4406 | 13 所以Linus说的不要所谓的C++/Java programer来碰他的项目,是有道理的.
【在 u****u 的大作中提到】 : 几问几答,漏洞百出.此楼可谓壮观.
|
b******n 发帖数: 592 | 14 指针的话不行啊,int **a怎么能跟int a[][]一样呢,layout都不同。。
你老大把B[6][6]往要float **B的函数送吧
【在 u****u 的大作中提到】 : 几问几答,漏洞百出.此楼可谓壮观.
|
F****n 发帖数: 3271 | 15 use void myfun(int time, double *A, double *B)
【在 p*********9 的大作中提到】 : 谢谢回答.有些confusing : 因为我定义的这几个矩阵都回定义成全局变量,所以我就用了这样的定义. : 如果定义正下面的样子: : void myfun(int time, double *A, double **B) : 有什么大的优势呢?毕竟这个矩阵都很小阿。
|
F****n 发帖数: 3271 | 16 First, this has nothing about C++, it's C
Second, in Java there will be no such problems, even for newbies.
I basically agree with Linus that C++ is crap, and will always stick to C if
I need to program native code. But Java is not C++. Java is much easier to
use.
【在 n******t 的大作中提到】 : 所以Linus说的不要所谓的C++/Java programer来碰他的项目,是有道理的.
|
H***a 发帖数: 735 | 17 According to LZ, B is a 2D array, doube *B won't work unless you include
column size
【在 F****n 的大作中提到】 : use void myfun(int time, double *A, double *B)
|
F****n 发帖数: 3271 | 18 Nobody uses 2D array to pass matrix. Pass it as a pointer and compute the
index.
【在 H***a 的大作中提到】 : According to LZ, B is a 2D array, doube *B won't work unless you include : column size
|
H***a 发帖数: 735 | 19 that's ok, but how to compute the index? There is no column size information from caller, unless you want this
function decides for the caller, which will make this function itself not reusable.
【在 F****n 的大作中提到】 : Nobody uses 2D array to pass matrix. Pass it as a pointer and compute the : index.
|
z****e 发帖数: 2024 | 20 我冷!
【在 b******n 的大作中提到】 : static array是需要的
|
|
|
p***o 发帖数: 1252 | 21 Well, it's a magic number in LZ's original code. So we can still
use that magic number and hopefully the compiler will optimize
the multiplication away ...
information from caller, unless you want this
reusable.
【在 H***a 的大作中提到】 : that's ok, but how to compute the index? There is no column size information from caller, unless you want this : function decides for the caller, which will make this function itself not reusable.
|
b******n 发帖数: 592 | 22 Why not. It is easier to read than those [i*L+j]
【在 F****n 的大作中提到】 : Nobody uses 2D array to pass matrix. Pass it as a pointer and compute the : index.
|
b******n 发帖数: 592 | 23 奇怪了,你要static array做argument的时候2d的不给size怎么行呢。。你冷个头
【在 z****e 的大作中提到】 : 我冷!
|
F****n 发帖数: 3271 | 24 Oh yeah, you need to pass the column size as parameter if it will be
something other than 6.
information from caller, unless you want this
reusable.
【在 H***a 的大作中提到】 : that's ok, but how to compute the index? There is no column size information from caller, unless you want this : function decides for the caller, which will make this function itself not reusable.
|
F****n 发帖数: 3271 | 25 Because C arrays are declared and not dynamic, and you need to use pointer
to pass arrays of unknown size. Just use &array[0][0] in the function call
and pass the dimensions.
【在 b******n 的大作中提到】 : Why not. It is easier to read than those [i*L+j]
|
b******n 发帖数: 592 | 26 Or you can pass array[6][6]..come on, it is not that complicated... on what
earth it is unknown size anyway, LZ has declared an array and want to use it
in a function. Well, I am not interested in it any more...it was just an
answer to the suggestion someone made about taking out 6 in the function
prototype.
【在 F****n 的大作中提到】 : Because C arrays are declared and not dynamic, and you need to use pointer : to pass arrays of unknown size. Just use &array[0][0] in the function call : and pass the dimensions.
|