Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by EternallyCurious. 04/18/24 10:45
StartWeek not working as it should
by Zheka. 04/18/24 10:11
folder management functions
by VoroneTZ. 04/17/24 06:52
lookback setting performance issue
by 7th_zorro. 04/16/24 03:08
zorro 64bit command line support
by 7th_zorro. 04/15/24 09:36
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:48
Zorro FIX plugin - Experimental
by flink. 04/14/24 07:46
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (1 invisible), 672 guests, and 0 spiders.
Key: Admin, Global Mod, Mod
Newest Members
EternallyCurious, howardR, 11honza11, ccorrea, sakolin
19047 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Index Pointer to Array #466646
06/25/17 22:18
06/25/17 22:18
Joined: Oct 2008
Posts: 681
Germany
Ayumi Offline OP
User
Ayumi  Offline OP
User

Joined: Oct 2008
Posts: 681
Germany
Hey,

anyone know, how to define a Pointer to one Array Index?

E.g:

Code:
typedef struct Weapon
{
  int Id;
} Weapon;
Weapon Weapons[10][3];

...

// Another Function...
void Anyone()
{
   Weapon* wp;
   wp = &Weapons[0][0];
}



Now, i have a Pointer to the Struct Array with Index 1(wp[1][0] -> index 2 etc)
But i only need a variable with ONE element of this array, to just use "wp" and not "wp[x][y]"...

Possible?

Re: Index Pointer to Array [Re: Ayumi] #466647
06/25/17 22:26
06/25/17 22:26
Joined: Oct 2011
Posts: 1,082
Germany
C
Ch40zzC0d3r Offline
Serious User
Ch40zzC0d3r  Offline
Serious User
C

Joined: Oct 2011
Posts: 1,082
Germany
Not sure if I got you right, your description is pretty weird..

Code:
Weapon *wp = &Weapons[4][2];
..
int myID = wp->Id;



Or do you actually want a pointer to only one row so you can do wp[secondIndexOnly] where wp is Weapons[firstIndex] ?
That would be:

Code:
Weapon *wp = Weapons[4];
..
int myID = wp[2].Id;


Last edited by Ch40zzC0d3r; 06/25/17 22:28.
Re: Index Pointer to Array [Re: Ch40zzC0d3r] #466648
06/25/17 22:31
06/25/17 22:31
Joined: Oct 2008
Posts: 681
Germany
Ayumi Offline OP
User
Ayumi  Offline OP
User

Joined: Oct 2008
Posts: 681
Germany
Sorry, it s difficult to explain in english:D

I don t want set any Index and just use "wp" like a object in C#.
It is possible?

E.g:

Code:
Weapon *wp = Weapons[4];

wp.Id ...



because of readablity....

Code:
if(wp[i1][i2].Mdl == NULL)
{       
    ptr_remove(ent_create(wp[i1][i2].MdlHoloName , nullvector, NULL));
    wp[i1][i2].Mdl = ent_create(wp[i1][i2].MdlHoloName, nullvector, NULL);
}




Und in deutsch, weils einfach mal einfacher ist:D
Ich habe ein Struct Array. Das Array kann ich ja per Pointer ansteuern und auf den ersten index zugreifen, wie im Beispiel im ersten Post. Leider muss ich dem Pointer aber AUCH ein index mitgeben, was ich nicht will. C ist nicht C# und somit hab ich auch kein einzelnes Objekt.
Ich möchte also z.b. Index 2 als Structobjekt haben. Ein Struct wäre ja auch ein Objekt, aber kein Array.

Darum legte ich den Pointer auch so an:

Weapon *wp = &Weapons[0][0]; Weapon ist das Structobjekt, wie bei einem int Array eben eine einzelne Zahl.
Wenn ich das richtig sehe, wird nur der Umweg bleiben, einzelne Elemente im Struct anzusteuern, wie du das vorhin schon getan hast.


Last edited by Ayumi; 06/25/17 22:47.
Re: Index Pointer to Array [Re: Ayumi] #466649
06/25/17 22:47
06/25/17 22:47
Joined: Oct 2011
Posts: 1,082
Germany
C
Ch40zzC0d3r Offline
Serious User
Ch40zzC0d3r  Offline
Serious User
C

Joined: Oct 2011
Posts: 1,082
Germany
Yes check my second code tag.
Heres another example:
Code:
int array[10][5];
array[4][2] = 69;

int *pArray4 = array[4];
printf("Test: %in", pArray4[2]);



EDIT: Du kannst auch einfach alles in defines oder funktionen wrappen

Last edited by Ch40zzC0d3r; 06/25/17 22:52.
Re: Index Pointer to Array [Re: Ch40zzC0d3r] #466650
06/25/17 22:57
06/25/17 22:57
Joined: Oct 2008
Posts: 681
Germany
Ayumi Offline OP
User
Ayumi  Offline OP
User

Joined: Oct 2008
Posts: 681
Germany
Danke, glaub aber nicht, dass mein problem verstanden wurde.

Dein Beispiel ist zwar schon besser als mit 2 Indexern aber immer noch ein index zu viel. Ich möchte eine Art Objekt haben. Ein Pointer, der auf Adresse xy zeigt und den ich ohne Index nutzen kann.

Weapon *wp = &Weapons[0][0]; ...denn das hier ist ja auch nur ein Pointer auf Adresse 0 des Structarrays. Ich will aber einen Pointer auf Adresse XY, ohne dafuer noch den index angeben zu müssen. Wirst ja sonst wahnsinnig mit dem Code:D

D.h.
Weapon *wp = &Weapons[4][0]; wäre immer noch Index 0. Habs bereits probiert. (Meine Waffe, die eigentlich auf Index 4 liegt, ist in dem Fall Index 0)

EDIT:
Noch genauer ausgedrückt:
Statt "wp[0][2].Mdl" möchte ich gerne "wp.Mdl" nutzen, wobei wp ein Pointer des Structarrays von [0][2] wäre (bzw. genau jene Adresse)




Last edited by Ayumi; 06/25/17 23:20.
Re: Index Pointer to Array [Re: Ayumi] #466652
06/26/17 00:47
06/26/17 00:47
Joined: Apr 2007
Posts: 3,751
Canada
WretchedSid Offline
Expert
WretchedSid  Offline
Expert

Joined: Apr 2007
Posts: 3,751
Canada
Ähm, also so ganz versteh ich das nicht? Der index ist der offset in den array, nicht Adresse 0 (es sei denn der offset ist 0).

Weapon* wp = &Weapons[4][0];

Da, da ist deine Waffe.

printf("%d", wp->id); <- Kein index


Shitlord by trade and passion. Graphics programmer at Laminar Research.
I write blog posts at feresignum.com
Re: Index Pointer to Array [Re: WretchedSid] #466653
06/26/17 07:08
06/26/17 07:08
Joined: Oct 2008
Posts: 681
Germany
Ayumi Offline OP
User
Ayumi  Offline OP
User

Joined: Oct 2008
Posts: 681
Germany
Dann versteh ich das aber auch nicht, weswegen ich ja hier nachfrage.
Vielleicht überseh ich aber einfach irgendwas?

"Adresse" meint im letzten Post nicht die Adresse im Speicher:D

Code:
typedef struct Weapon
{
  int Id;  
  STRING* Name;
  var KeyCode;  
  int IsCollected; 
  
  STRING* MdlName;
  STRING* MdlHoloName;
  ENTITY* Mdl;
   
} Weapon;
Weapon Weapons[10][3];


void InitWeapons()
{
   int i,j;
   for(i = 0; i< 10; i++)
   {
      for(j = 0; j< 3; j++)
   	{	
      	Weapons[i][j].Id = i+1;
      	Weapons[i][j].KeyCode = i+2;   
      }
   }
     
  	
   // Startwaffe   
   Weapons[0][0].MdlName = "UtMpi.mdl";	
   Weapons[0][0].Name = "Tactical Cardridge Weapon";
   Weapons[0][0].IsCollected = 1;
   // ....
}


// Erzeugt eine WaffeX Quants ueber dem Model. Wird vom Spieler eingesammelt und das Model im Struct gespeichert-
action CreateWeaponSpawn()
{
  while (!player) {wait (1);}  
  	
  int i;
  int i1 = (int)my.skill2;
  int i2 = (int)my.skill3;		
  ENTITY* ent;
  Weapon* wp;
  wp = &Weapons[i1][i2];
   
     if(wp.Mdl == NULL)
     {  
	ptr_remove(ent_create(wp.MdlName, nullvector, NULL));
	wp.Mdl = ent_create(wp.MdlName, nullvector, NULL);
	      		      
	while(wp.Mdl == NULL) { wait(1); }
	         	      
	set(wp.Mdl, INVISIBLE|PASSABLE|ZNEAR);
     }
			
     ent = ent_create(wp.MdlName, vector(my.x, my.y, my.z + 35), NULL);
     while(ent == NULL) { wait(1); }
     set(ent, PASSABLE);


}




In einer While wird dann nach Levelstart abgefragt, ob eine Taste gedrückt wurde.
Danach wird die Waffe zugeordnet.

Mit Weapons[x][y].Mdl = .... funktioniert das ganze auch, aber nicht per Pointer.

Code:
int i,j;
	for(i = 0; i < 10; i++)
	{  
		for(j = 0; j < 3; j++)
		{
		   if(Weapons[i][j].IsCollected) {
				//set(Weapons[i][j].Mdl, INVISIBLE);
			   //set(Weapons[i][j].Muzzle, INVISIBLE);	
		   }
   	}
	}
	

	reset(Weapons[wId1][wId2].Mdl, INVISIBLE);
   ActId.W1 = wId1;
   ActId.W2 = wId2;
   SetCrosshair(wId1,wId2);




EDIT: "Was funktioniert daran nicht?" Wird die Waffe eingesammelt und die entsprechende taste fuer die Waffe gedrückt, werden alle Waffen unsichtbar und die aktuell gewählte sichtbar. Mit obrigen Code wird Waffe 1 unsichtbar, Waffe 4 taucht aber gar nicht erst auf. Setze ich die Waffen nicht unsichtbar, so ist Waffe 4 wieder Waffe 1. Darum vermute ich, der Pointer zeigt auf Index 0.


EDIT2: Ich habe nochmal alle Daten geprüft. So, wie ich die Pointer und Abfragen gesetzt hatte MUSS es bereits korrekt sein, denn Index und Name scheinen richtig zu sein. ich muss den Fehler wohl in meinem Code suchen.

Danke fuer die Hilfe.

Last edited by Ayumi; 06/26/17 14:23.
Re: Index Pointer to Array [Re: Ayumi] #466656
06/26/17 14:30
06/26/17 14:30
Joined: Oct 2008
Posts: 681
Germany
Ayumi Offline OP
User
Ayumi  Offline OP
User

Joined: Oct 2008
Posts: 681
Germany
Hehe Fehler gefunden...

Ich habe insgesamt 3 x 10 Waffen als Struct initialisiert. Davon wurden aber erst 10 benannt (Name).

D.h. in der Schleife, die den Keycode abfragt, wird auch die zweite Dimension des Arrays durchlaufen. MDL ist null und darum wird auch nichts angezeigt:D

EDIT: War zu voreilig, wird aber irgendwas in der Richtung sein. Jedenfalls kann der Post abgehakt werden, weil die Pointer funktionieren.

Last edited by Ayumi; 06/26/17 14:45.

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1