---
title: "array, nybörjarfråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/66926-array-nybörjarfråga"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "neversleep"
published: "2003-02-02T11:28:00.000Z"
updated: "2003-02-04T16:00:56.000Z"
replies: 10
views: 443
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/66926-array-nybörjarfråga"
---

# array, nybörjarfråga

## #1 — neversleep, 2003-02-02T11:28Z

hur skickar anger man adressen till en plats i arrayen i vb? Pekarhantering existerar inte va?

Motsvarande i C kod:
\*hej = &arr(30)

tack på förhand

Permalänk: https://www.webforum.nu/p/66926

## #2 — niko, 2003-02-02T14:17Z

```
dim lAddress as long

lAddress=VarPtr(arr(30))

eller ..

lAddress=StrPtr(arr(30))

eller ..

lAddress=ObjPtr(arr(30))
```

beroende på om arrayen innehåller enkla datatyper, strängar, eller objektreferenser.
Det är dock odokumenterade "features" som man normalt inte behöver använda.

Permalänk: https://www.webforum.nu/p/936140

## #3 — neversleep, 2003-02-02T15:50Z

Tack nico
Skulle nog ha lagt till att det var till vb.net, verkar itne som om det går att arbeta med pekare där. Vet du?

Permalänk: https://www.webforum.nu/p/936212

## #4 — niko, 2003-02-02T16:47Z

.NET? I .NET är det överhuvudtaget inte normalt att använda adresser på det här sättet eftersom garbage collectorn optimerar heapen och *när som helst* kan flytta en variabel (eg. ett objekt) till en annan plats.

I C# finns nyckelordet **fixed** om man vill sätta denna mekanism ur spel:

```
fixed (long * pekare=& mittObjekt)
{
	//mittobjekt ligger kvar på samma plats i detta block.
}
```

I VB.NET tror jag inte man har tillgång till **fixed** men däremot borde man ju kunna skriva en klass i C# som gör jobbet och sen använda den i VB. Det beror ju lite på vad man vill göra ..

Permalänk: https://www.webforum.nu/p/936250

## #5 — neversleep, 2003-02-02T17:25Z

Möblerar garbage collectorn om i minnet? Det var ju bra att veta:)

Jag vill inte pyssla med ngn avancerad pekarhantering med en specifik adress, utan eg bara göra ett anrop med en array, där jag inte vill ha in hela arrayen till subrutinen. Säg att jag vill skicka in min array från 5 elementet och framåt, hur gör man då smidigast?

Eftersom du verkar ha en jäkla koll kanske du även kan säga om det är mer optimerat att skicka in arrayen byRef än byVal. Är det bara en adress som skickas vid call by ref medan hela arrayen måste kopieras vid call by val?

tack på förhand

Permalänk: https://www.webforum.nu/p/936275

## #6 — niko, 2003-02-02T18:10Z

> Möblerar garbage collectorn om i minnet?

Ja, i allra högsta grad. Precis som i Java så sveper GC:en ibland över (den managade) heapen och komprimerar och flyttar grejer. Om man genom nåt API-trixande skulle lyckas få tag på en adress så kan man alltså aldrig vara helt säker på att den fortfarande är giltig på nästa rad.

> om det är mer optimerat att skicka in arrayen byRef än byVal.

En array ärver alltid (implicit) av System.Array som är en referenstyp. Så när du skickar in en array i en funktion så skickas alltid en referens/pekare och inte en kopia av hela arrayn. 

När jag testar nu så verkar det inte inte finnas någon skillnad mellan att skriva *ByVal* eller *ByRef*. I båda fallen så kan man ändra enskilda element inifrån funktionen precis som om det var en referens/pekare. Eventuellt så tolkas ByVal som att det ska skickas en kopia av referensen? Vet inte riktigt. Har lite dålig koll på VB.NET.

Permalänk: https://www.webforum.nu/p/936296

## #7 — neversleep, 2003-02-03T22:38Z

Okej tackar niko för svaren. Dock vet jag fortfarande inte hur jag "pekar" om min array. I mitt anrop vill jag ju inte skicka in hela arrayen, utan bara från ett visst element och framåt.

För närvarande så skapar jag en ny array, kör en array.copy till denna från de element och framåt som jag vill använda. Detta känns dock lite omständigt, men det kanske man får leva med?

jag vill ju göra som i C
anrop(&array\[element\])

Permalänk: https://www.webforum.nu/p/937433

## #8 — Marcus E, 2003-02-04T09:44Z

Flyttad från Visual Basic (som endast gäller version 6)

Permalänk: https://www.webforum.nu/p/940414

## #9 — niko, 2003-02-04T10:24Z

Tja.. Om du inte kör C# och har tillgång till *fixed* och *unsafe* så har jag nog ingen riktigt bra lösning.

Ett sätt om du inte ska ändra i arrayen inifrån funktionen är ju att göra precis som du gör: Skapa en kopia av en delmängd mha *Array.Copy*.

Ett annat sätt kunde ju vara att skicka in hela arrayen *ByRef* **och** dessutom skicka in ett startindex?

Permalänk: https://www.webforum.nu/p/940433

## #10 — Gladh, 2003-02-04T14:42Z

Jag håller med niko. Skicka med Arrayn och eftersom det ær en referens så spelar det ingen roll, eftersom du då inte skickar en massa data, utan endast en "pekare". Skicka sedan med start och slutindex (om det inte alltid ær sista posten).

Så kan du i din funktion hæmta ut den datan du vill, och gøra vad du vill med den.

\- M

Permalänk: https://www.webforum.nu/p/940571

## #11 — neversleep, 2003-02-04T16:00Z

Ok då får det bli så

jag bugar och tackar så mycket!

Permalänk: https://www.webforum.nu/p/940642

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/66926-array-nybörjarfråga
