HP SunSoft Pascal 4.0 User Manual
Page 127
The C–Pascal Interface
103
6
Example 2: Multi-Dimension Array
The Pascal procedure,
RealCA.p
. Pascal passes low
bound, high bound, and element
width.
procedure RealCA(var A: array [r1..r2: integer] of
array [c1..c2: integer] of real);
var
col, row: integer;
begin
for row := r1 to r2 do
for col := c1 to c2 do
if row = col then
A[row, col] := 1.0
else
A[row, col] := 0.0
end; { RealCA }
The C main program,
RealCAMain.c
. Array
M
has 2
rows of 3 columns each.
c1
and
c2
are the first and last columns.
r1
and
r2
are the first and last
rows.
wc
is the width of a column
element (smallest) and is equal to
sizeof( M[0][0] )
.
wr
is the
width of a row element (next
largest) and is equal to
(c2-c1+1) * wc
.
#include
#define NC 3
#define NR 2
extern void RealCA(double [][NC], int, int, int, int, int);
int main(void)
{
double
M[NR][NC];
int
col, c1, c2, row, r1, r2, wc, wr;
c1 = 0;
r1 = 0;
c2 = NC - 1;
r2 = NR - 1;
wc = sizeof(M[0][0]);
wr = (c2 - c1 + 1) * wc;
RealCA(M, r1, r2, wr, c1, c2);
for (row = r1; row <= r2; row++) {
printf("\n");
for (col = c1; col <= c2; col++)
printf("%4.1f", M[row][col]);
};
printf("\n");
}