#include <stdio.h>
int main (void)
{
float m[3][3];
int i, j, n;
/*
* Note the C declaration of this Fortran function. Although
* we're passing a matrix, we declare the first argument just
* float* . This is because a dynamically-dimensioned array can't
* be expressed in C.
*/
extern void addarr (float *m, int *n);
n = 3; /* dimension of matrix */
for (i=0; i<3; i++)
for (j=0; j<3; j++)
m[i][j] = (float)(10*i+j);
printf ("Before:\n");
for (i=0; i<3; i++)
{
printf ("m[%d][j]: ", i);
for (j=0; j<3; j++)
printf ("%6.0f", m[i][j]);
printf ("\n");
}
/* Pass the array, coerced to (float*). */
/* &m[0][0] (address of the first element of the array) would also work. */
addarr ((float*)m, &n);
printf ("\nAfter:\n");
for (i=0; i<3; i++)
{
printf ("m[%d][j]: ", i);
for (j=0; j<3; j++)
printf ("%6.0f", m[i][j]);
printf ("\n");
}
}
/* cadd2 adds twice its second argument to its first. */
void cadd2 (float *a1, float a2)
{
a2 *= 2; /* double a2 - this doesn't change a2 in caller */
*a1 += a2; /* add a2 to what a1 points to */
}