将从fscanf创建的数组传递给新函数

时间:2013-04-03 04:06:07

标签: c scanf

我已成功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。

4 个答案:

答案 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/