static unsafe void PointersAsArgsTest(int *ip, int **ipp, int *[] ipa, int **[] ippa, DateTime *dtp, DateTime **dtpp, DateTime *[] dtpa, DateTime **[] dtppa) { Console.WriteLine($"break here!"); if (ip == null) { Console.WriteLine($"ip is null"); } Console.WriteLine($"done!"); }
public static unsafe void LocalPointers() { int ivalue0 = 5; int ivalue1 = 10; int * ip = &ivalue0; int * ip_null = null; int **ipp = &ip; int **ipp_null = &ip_null; int *[] ipa = new int *[] {&ivalue0, &ivalue1, null }; int **[] ippa = new int **[] {&ip, &ip_null, ipp, ipp_null, null }; char cvalue0 = 'q'; char * cp = &cvalue0; DateTime dt = new DateTime(5, 6, 7, 8, 9, 10); void * vp = &dt; void * vp_null = null; void ** vpp = &vp; void ** vpp_null = &vp_null; DateTime * dtp = &dt; DateTime * dtp_null = null; DateTime *[] dtpa = new DateTime *[] { dtp, dtp_null }; DateTime **[] dtppa = new DateTime * *[] {&dtp, &dtp_null, null }; Console.WriteLine($"-- break here: ip_null==null: {ip_null == null}, ipp_null: {ipp_null == null}, *ipp_null==ip_null: {*ipp_null == ip_null}, *ipp_null==null: {*ipp_null == null}"); var gs = new GenericStructWithUnmanagedT <DateTime> { Value = new DateTime(1, 2, 3, 4, 5, 6), IntField = 4, DTPP = &dtp }; var gs_null = new GenericStructWithUnmanagedT <DateTime> { Value = new DateTime(1, 2, 3, 4, 5, 6), IntField = 4, DTPP = &dtp_null }; var gsp = &gs; var gsp_null = &gs_null; var gspa = new GenericStructWithUnmanagedT <DateTime> *[] { null, gsp, gsp_null }; var cwp = new GenericClassWithPointers <DateTime> { Ptr = dtp }; var cwp_null = new GenericClassWithPointers <DateTime>(); Console.WriteLine($"{(int)*ip}, {(int)**ipp}, {ipp_null == null}, {ip_null == null}, {ippa == null}, {ipa}, {(char)*cp}, {(vp == null ? "null" : "not null")}, {dtp->Second}, {gsp->IntField}, {cwp}, {cwp_null}, {gs_null}"); PointersAsArgsTest(ip, ipp, ipa, ippa, &dt, &dtp, dtpa, dtppa); }