我已成功fscanf文本文件并保存到数组E2N1。我试图将其作为指针传递给函数,但它无法正常工作。每当我尝试调用E2N1 [0] [0]时,它说E2N既不是数组也不是指针。我一直在寻找解决方案。 (对不起E2N本来是E2N1) 我使用fscanf作为:
int E2N1[noz.rowE2N][Q.N];
FILE* f = fopen("E2N.txt", "r");
for(i=0; i<noz.rowE2N; i++){
for (j=0; j<Q.N; j++){
fscanf(f,"%d",&E2N1[i][j]);
}
fscanf(f,"\n");
}
fclose(f);
我再也无法将E2N1传递给函数。
非常感谢您的帮助。
功能是:
double *dudtF = stiffness(&U, &massM, &noz, &newV, &E2N1, &I2E, &B2E, &PP, &QQ);
我将函数头写为:
double *stiffness(double *U, double *massM, MESH *meshN, double *V1, int *E2N1, int *I2E, int *B2E, ordApprox *pp, ordApprox *qq)
V1,I2E,B2E是三个数组,我正在尝试对它们做同样的尝试,而不是尝试使用E2N1。
答案 0 :(得分:0)
关于数组的有趣之处在于它们实际上充当了指针。
如果您有数组char a[3]
,则变量等同于char* p
,如果您有数组char b[3][4]
,变量b
等同于char** q
。换句话说,您应该考虑更改方法中的处理以引用引用(可能再次引用)到整数。
试试google ...这里有一些我得到的结果。
http://www.dailyfreecode.com/code/illustrate-2d-array-int-pointers-929.aspx
http://www.cs.cmu.edu/~ab/15-123S09/lectures/Lecture%2006%20-%20%20Pointer%20to%20a%20pointer.pdf
答案 1 :(得分:0)
您不需要传递&E2N1
,只需传递E2N1
no &
,因为数组名称本身会转换为指针。
double *dudtF = stiffness(&U, &massM, &noz, &newV, E2N1, &I2E, &B2E, &PP, &QQ);
此外,您需要将其视为int **
作为其二维数组。
double *stiffness(double *U, double *massM, MESH *meshN, double *V1, int **E2N1, int *I2E, int *B2E, ordApprox *pp, ordApprox *qq)
答案 2 :(得分:0)
以下是如何将矩阵从一个函数传递到另一个函数的示例...
void foo (int **a_matrix)
{
int value = a_matrix[9][8];
a_matrix[9][8] = 15;
}
void main ()
{
#define ROWS 10
#define COLUMNS 10
int **matrix = 0;
matrix = new int *[ROWS] ;
for( int i = 0 ; i < ROWS ; i++ )
matrix[i] = new int[COLUMNS];
matrix[9][8] = 5;
int z = matrix[9][8] ;
foo (matrix);
z = matrix[9][8] ;
}
答案 3 :(得分:0)
您无法通过点引用引用传递给函数的多维数组,如下所示:
int iVals[10][10];
foo(iVals);
void foo(int** pvals)
{
// accessing the array as follows will cause an access violation
cout << pvals[0][1]; // access violation or unpredictable results
}
您需要在函数原型中为数组指定第二个维度 例如:
foo(int ivals[][10])
{
cout << ivals[0][1]; // works fine
}
如果不知道尺寸,那么我建议你遵循这里概述的原则:
void foo(int *p, int r, int c)
{
for(int i=0; i<r; i++)
{
for(int j=0; j<c; j++)
{
printf("%d\n", p[i*c+j]);
}
}
}
int c[6][6];
// pointer to the first element
foo(&c[0][0], 6, 6);
// cast
foo((int*)c, 6, 6);
// dereferencing
foo(c[0], 6, 6);
// dereferencing
foo(*c, 6, 6);
我希望这会有所帮助。
或者您可以使用SAFEARRAY - 请参阅: http://limbioliong.wordpress.com/2011/06/22/passing-multi-dimensional-managed-array-to-c-part-2/