Translation of C function pointer.

Ali Çehreli acehreli at yahoo.com
Fri Sep 17 10:43:12 PDT 2010


Jonathan M Davis wrote:
 > On Thursday 16 September 2010 23:50:16 Kagamin wrote:
 >> BCS Wrote:
 >>> The trick is that function pointers are best read from the inside out.
 >> All C declarations are read from inside out, postfixes take precedence,
 >> that's why you have to use braces to give pointer higher precedence. One
 >> of the earlier books by Stroustroup gives a nice monster of arrays,
 >> pointers and functions to master understanding of declarations.
 >
 > It's essentially the same principle that makes it so that the D 
declaration
 >
 > int[4][3] a;
 >
 > is an array with 3 rows and 4 columns rather than 4 rows and 3 
columns like
 > you'd expect.
 >
 > - Jonathan M Davis

I don't see it that D's declaration follows C's at least in array 
declarations:

int[4] is an array of 4 ints; like Simen, let's call it U.
Now U[3] is an array of 3 Us; i.e. 3 int[4]s

I read that from left to right, not inside out.

The equivalent C declaration has the opposite type:

     int a[4][3];

Now that is 4 arrays of 3 ints.

D wins big time here! :)

Two programs to test:

#include <stdio.h>
int main()
{
     int a[4][3];
     printf("%u\n", sizeof(a[0]));

     return 0;
}

Outputs 12.

import std.stdio;
void main()
{
     int[4][3] a;
     writeln(typeof(a[0]).sizeof);
}

Outputs 16.

Ali


More information about the Digitalmars-d-learn mailing list