Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Array-problem

Postades av 2007-07-31 23:25:40 - Jon Tejnung, i forum vb.net, Tråden har 6 Kommentarer och lästs av 739 personer

Hej.
Finns det någon här som förstår hur detta kan komma sej och vad jag kan göra åt det?

    Sub test1()
        Dim ar(1), ar2 As Int32

        MessageBox.Show(ar(0) & "/" & ar(1) & "/" & ar2)

        test2(ar, ar2)

        MessageBox.Show(ar(0) & "/" & ar(1) & "/" & ar2)
    End Sub

    Sub test2(ByVal value1() As Int32, ByVal value2 As Int32)
        value1(0) = 10
        value1(1) = 20
        value2 = 30
    End Sub

Kör man test1 returneras 0/0/0 i den första rutan och 10/20/0 i den andra.

Genom att köra test2 har alltså värderna i den ursprungliga arrayen ändrats, men inte i den ursprungliga integern. Ska inte ByVal förhindra detta?


Svara

Sv: Bugg i VB 2005 EE?

Postades av 2007-08-01 09:05:37 - Johan Djupmarker

Jag är inte påläst på hur det verkligen fungerar, men en gissning är att en array består av pekare till de riktiga värdena/objekten. ByVal gör då bara en "kopia av pekaren" som ändå pekar på samma värde.

/Johan


Svara

Sv: Bugg i VB 2005 EE?

Postades av 2007-08-01 09:16:23 - Tomas Granlund

Nja, det du gör med ByVal är att du kopierar pekaren till din array och med ByRef skickar du med pekaren direkt. Skillnaden blir att ett argument som skickats ByRef kan peka på nåt helt annat när underproceduren returnerar.

T.ex:

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Dim foo() As Integer = {1, 2, 3}
        Dim bar() As Integer = {1, 2, 3}
        MessageBox.Show("foo: " & foo(0) & "/" & foo(1) & "/" & foo(2))
        Test1(foo)
        MessageBox.Show("foo: " & foo(0) & "/" & foo(1) & "/" & foo(2))
        MessageBox.Show("bar: " & bar(0) & "/" & bar(1) & "/" & bar(2))
        Test2(bar)
        MessageBox.Show("bar: " & bar(0) & "/" & bar(1) & "/" & bar(2))

    End Sub

    Private Sub Test1(ByVal anArr As Integer())
        Dim anewarr(UBound(anArr)) As Integer
        For i As Integer = LBound(anArr) To UBound(anArr)
            anewarr(i) = anArr(i) + 1
        Next
        anArr = anewarr
    End Sub

    Private Sub Test2(ByRef anArr As Integer())
        Dim anewarr(UBound(anArr)) As Integer
        For i As Integer = LBound(anArr) To UBound(anArr)
            anewarr(i) = anArr(i) + 1
        Next
        anArr = anewarr
    End Sub


foo skickades ByVal och tilldelningen anArr = anewarr i Test1 saknar således konsekvens eftersom anArr i det fallet var en kopierad pekare. I Test2 däremot så ändras verkligen bar att peka på den nya arrayen eftersom den skickades ByRef.

ByRef används ofta för att hålla "extra" resultat av en funktion -- t.ex. funktionen Math.DivRem som returnerar både kvot (via funktionens returvärde) och rest (via en ByRef-parameter).


Svara

Sv:Bugg i VB 2005 EE?

Postades av 2007-08-02 19:38:20 - Jon Tejnung

Jasså, det är så det ligger till. Tack för svaren förresten!
Men finns det något sätt man kan kopiera en array till en annan och sedan ändra värderna på den andra utan att de ändras i den första?


Svara

Sv: Bugg i VB 2005 EE?

Postades av 2007-08-02 19:44:14 - Simon Dahlbacka

du vill göra en så kallad djup kopiering ? (deep copy). Tyvärr tror jag inte det finns nån inbyggd "deep copy" metod, men det är ju inte svårt att göra själv...


Svara

Sv:Bugg i VB 2005 EE?

Postades av 2007-08-02 19:59:11 - Jon Tejnung

Hur fungerar det isåfall?
Är det bara att loopa igenom arrayen och kopiera "variabel för variabel"?


Svara

Sv: Bugg i VB 2005 EE?

Postades av 2007-08-03 08:26:55 - Johan Djupmarker

<b>Är det bara att loopa igenom arrayen och kopiera "variabel för variabel"?</b>

Ja

/Johan


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
344
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies