Array Pointer

BlitzMax Forums/BlitzMax Beginners Area/Array Pointer

Hi,

I converted an int array to a byte pointer, but I cannot figure out how I can create an int array from the byte pointer or how to access the members directly.

Global Array:Int[] = [100,200]
Global Pointer:Byte Ptr = Varptr Array


This is how I am getting the array address. How can I convert it back to an int array, or even better, access the values from the pointer correctly?

You can not create an int array from a byte ptr again. BM is typesafe and won't let you get an object from a typeless pointer again.
You must access it on memory level, this means int(pointer[i*4]) where i is the index.

this means int(pointer[i*4]) where i is the index.

Does that even work? Are not the first 16 or so bytes used for type info?

Are not the first 16 or so bytes used for type info?

In types (objects) they are, but ints are not objects in BlitzMax.

In types (objects) they are, but ints are not objects in BlitzMax.

really? Pass a bmax array to a C function and see what it gets you.

I converted an int array to a byte pointer

I'm not sure why on earth you'd ever want to do that... but you'll need some c/c++ glue to get it back from a pointer to the array...

something like this untested example :
' max code

Extern
  Function convertIntArrayPointerBackToArray:Int[](pointer:Byte Ptr)
End Extern

// some c++ glue

#include "blitz.h"

extern "C" {

   BBArray * convertIntArrayPointerBackToArray(BBArray * array) {
      return array;
   }

}


You must access it on memory level, this means int(pointer[i*4]) where i is the index.

You could use Int Ptr(pointer)[i]
really? Pass a bmax array to a C function and see what it gets you.

Use Varptr Array[0] instead to treat it like a C array.