QB64 Phoenix Edition
array assigned in SUBs - Printable Version

+- QB64 Phoenix Edition (https://staging.qb64phoenix.com)
+-- Forum: Official Links (https://staging.qb64phoenix.com/forumdisplay.php?fid=16)
+--- Forum: QB64 Phoenix Edition Wiki and Repo (https://staging.qb64phoenix.com/forumdisplay.php?fid=41)
+---- Forum: Repo Discussion (https://staging.qb64phoenix.com/forumdisplay.php?fid=42)
+---- Thread: array assigned in SUBs (/showthread.php?tid=1746)



array assigned in SUBs - sivacc - 06-11-2023

ReDim and assign an array within a SUB and pass through the SUB's parameters 
.......
getarray z%()
print ubound(z%), z%(5)
end
SUB getarray( x() as integer)
n%= 25
ReDim as ineger x(0 to n%-1)
for p%= 0 to  n%-1
x%(p%)= p%*p%
next
end sub


RE: array assigned in SUBs - SMcNeill - 06-11-2023

I just posted an example of this for you: https://staging.qb64phoenix.com/showthread.php?tid=1243&pid=16614#pid16614


RE: array assigned in SUBs - TerryRitchie - 06-11-2023

(06-11-2023, 03:10 AM)sivacc Wrote: ReDim and assign an array within a SUB and pass through the SUB's parameters 
.......
getarray z%()
print ubound(z%), z%(5)
end
SUB getarray( x() as integer)
n%= 25
ReDim as ineger x(0 to n%-1)
for p%= 0 to  n%-1
x%(p%)= p%*p%
next
end sub
Here is what I believe you are looking for:

Code: (Select All)
REDIM AS INTEGER x(0)

getarray x()
PRINT UBOUND(x), x(5)
END


SUB getarray (x() AS INTEGER)
    n% = 25
    REDIM AS INTEGER x(0 TO n% - 1)
    FOR p% = 0 TO n% - 1
        x(p%) = p% * p%
    NEXT
END SUB



RE: array assigned in SUBs - sivacc - 06-11-2023

Thanks Terry ! didnt know ReDim x(0) as Integer is ok ?


RE: array assigned in SUBs - TerryRitchie - 06-11-2023

(06-11-2023, 08:32 AM)sivacc Wrote: Thanks Terry ! didnt know ReDim x(0) as Integer is ok ?
You're welcome. Glad I could help.

DIM and REDIM will accept any index value(s) for an array. All legal:

DIM x(-1 TO 10) AS <your_type_here>
DIM x(-100 TO -10) AS <your_type_here>
DIM x(50 TO 100) AS <your_type_here>
DIM x(1 TO 10, 50 TO 100) AS <your_type_here>

All of the DIMs above could also be REDIM if you like for dynamic arrays.

When you declare an array with an index of 0 -> DIM x(0) <- you are actually creating an array with one value. Remember, QB64 and most other programming languages treat zero as a valid amount.

DIM x(0)
x(0) = 10

Many times I'll create dynamic arrays at the top of my code with a 0 index, such as for a ship firing bullets. As each bullet is fired I simply increase the size of the dynamic array to accommodate.

TYPE Type_Bullet
    x AS SINGLE        ' x coordinate of bullet
    y AS SINGLE        ' y coordinate of bullet
    vx AS SINGLE      ' x vector (travel)
    vy AS SINGLE      ' y vector (travel)
    Alive AS INTEGER ' is bullet still active? (true/false)
END TYPE

REDIM Bullet(0) AS Type_Bullet ' player bullet array

<later in the code>

IF PlayerFiredBullet THEN '                                     did player fire bullet?
    REDIM _PRESERVE Bullet(UBOUND(Bullet) + 1) AS Type_Bullet ' increase the size of array while preserving data already contained within
    Bullet(UBOUND(Bullet)).x = ShipX '                    apply new bullet values
    Bullet(UBOUND(Bullet)).y = ShipY
    Bullet(UBOUND(Bullet)).vx = ShipVx
    Bullet(UBOUND(Bullet)).vy = ShipVy
    Bullet(UBOUND(Bullet)).Alive = -1
END IF

Here is the link to the wiki for DIM: https://qb64phoenix.com/qb64wiki/index.php/DIM


RE: array assigned in SUBs - sivacc - 06-12-2023

Got it !