Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 18:42

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++]Frage zu Pointern

Discussion on [C++]Frage zu Pointern within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1

 
Terreox's Avatar
 
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
[C++]Frage zu Pointern

Hi zusammen,
ich arbeite mich momentan durch die XoaX.net C++ Reihe und ergänze nebenbei durch andere Videos von Youtube.
Bin zwar schon an Pointern vorbei, aber hab glaub ich mittlerweile den Sinn verstanden. Trotzdem möchte ich meine Vermutung "absichern".

Ich dachte immer, wofür Pointer?

Ich habe jetzt mal folgendes Beispiel geschrieben:
Code:
#include <iostream>

void changeName(char* newname);

char caString[12] = "ElitePvPers";

int main(){
	using namespace std;

	cout << caString << endl;

	char caOldString[10] = "HalloWelt";
	changeName(caOldString);

	cout << caString << endl;

	return 0;

}

void changeName(char* newname){
	strcpy(caString, newname);
}
Jetzt dazu ein Beispiel ohne Pointer:
Code:
#include <iostream>

void changeName(char newname[10]);

char caString[12] = "ElitePvPers";

int main(){
	using namespace std;

	cout << caString << endl;

	char caOldString[10] = "HalloWelt";
	changeName(caOldString);

	cout << caString << endl;

	return 0;

}

void changeName(char newname[10]){
	strcpy(caString, newname);
}
Hier übergebe ich ja das ganze char-Array an die Funktion changeName.

Jetzt zu meiner Frage:

1) Ist es richtig, dass der Vorteil des Beispiels mit Pointern darin liegt, dass weniger Speicher verbraucht wird, weil nur die Adresse des caOldString übergeben wird anstatt die ganze Variable nochmal?

2) Kann man den Speicherverbrauch der beiden Programme irgendwie sichtbar machen? Bei so kleinen Programmen ist das ja ein kleiner Unterschied, aber gibt es Programme (vielleicht auch Tools in VisualStudio), mit denen ich den exakten Speicherverbrauch sehen kann? Würde das mal gerne auch später bei größeren Programmen beobachten, inwiefern sich Optimierungen auswirken. Finde das sehr interessant^^


Würde mich über Antworten freuen
Greetz
Terreox is offline  
Old 01/02/2012, 17:46   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
...

im grunde hast du recht,
dein beispiel ist aber schlecht, weil du ein array genommen hast, was auch ein pointer ist - es wird ein ptr auf das erste arrayelement übergeben.
ein pointer ist IMMER 4 byte groß (32-bit), während strukturen und klassen idr. größer sind und es damit besser ist einen pointer zu übergeben, als eine komplette kopie der struktur/klasse.

mit pointern ergeben sich aber noch andere möglichkeiten, als "nur" speicher zu sparen, z.b. variable datentypen (ein void pointer kann auf beliebige datentypen zeigen) etc.
Dr. Coxxy is offline  
Old 01/02/2012, 18:23   #3

 
Terreox's Avatar
 
elite*gold: 155
Join Date: Aug 2009
Posts: 628
Received Thanks: 153
ah ok vielen dank für deine Antwort Dann hab ich es ja wirklich verstanden^^
gut das mit array wusste ich, hab ich nur nicht dran gedacht^^
Terreox is offline  
Old 01/02/2012, 19:55   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Der Unterschied zwischen Array und Pointer ist aber, dass das Array fest in der Datei gespeichert und auf dem Stack abgelegt wird.
Ein Pointer verweist normalerweise auf einen dynamisch allozierten Speicherblock, der im Freispeicher ist.

Btw. spart die Übergabe eines Pointers eigentlich weniger Speicher als Laufzeit (da nicht alles kopiert werden muss).
MrSm!th is offline  
Thanks
1 User
Old 01/03/2012, 10:13   #5
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Außerdem ermöglichen Pointer auch das verändern von lokalen Variablen und nicht nur von globalen, d.h. hättest du den Namen in der main()-Funktion deklariert wäre es deiner Funktion nicht möglich gewesen den Namen zuverändert, denn die Funktion würde nur eine Kopie der Variable bekommen. Erst durch den Einsatz von Pointern könntest du den Namen durch die FUnktion ändern.
jacky919 is offline  
Old 01/03/2012, 13:00   #6


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Du meinst die changeName erhält nur eine Kopie des Arrays?

Das ist nicht richtig, er hätte den String auch lokal deklarieren können und die Funktion würde trotzdem das Original modifizieren.
MrSm!th is offline  
Old 01/03/2012, 15:15   #7
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
ich glaub er meinte dass eher generell und jetzt nicht bei dem konkreten string beispiel^^
Dr. Coxxy is offline  
Old 01/03/2012, 15:20   #8
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Ja bei einem Array funktioniert das natürlich, wollte das nur sagen weil der TE das vielleicht nicht wusste.
jacky919 is offline  
Reply


Similar Threads Similar Threads
[FRAGE]VB Memoryediting mit Pointern
12/05/2011 - .NET Languages - 1 Replies
Hallo Elitepvpers-Community, ich habe mich heute mal mit Memoryediting in VB beschäftigt und bin auf dieses interessante Modul gestoßen: Module ReadWritingMemory Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer Private Declare Function WriteProcessMemory1 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef...
Frage zu Pointern in S4~
04/21/2011 - S4 League - 28 Replies
Hi ^^ also ich poste mal hier um Omdihar und FutureTrance nicht weiter zu nerven und hoffe mal ihr könnt mir helfen.. Ich habe vor einen kleinen Trainer mit AutoIt zu schreiben der zum Beispiel die Frisur Keen zu der aus dem Combiset zuchangen.. Selbes auch für Trainingsps-> Taser Ich hab erstmal mit Tps -> Taser angefangen also brauch ich ja die Addresse fürs Tps (2000000) die richtige von den ca 5 ~ 10 Addressen habe ich immer mit ausprobieren im Lobbyinventar getestet.. Dank...
Frage zu Pointern in C
06/17/2009 - General Coding - 5 Replies
Hi ich wollte mal nen String in C ausgeben mit dem Programm hier: #include <stdio.h> int main(void) { char *string="Hallo Welt\0"; printf("String:%s",*string); return 0; } was nicht geklappt hat also habe ich es so versucht: #include <stdio.h>
Allg. frage zu Pointern, und wie man sie rausfinde
04/13/2007 - General Coding - 9 Replies
Hallo liebes e*pvp-team, hallo liebe Leute, Nach langer Zeit melde ich mich hier auch mal wieder, und das gleich mit einer Frage, die wohl nicht so einfach zu beantworten ist. Also, vorweg will ich sagen das ich bereits über google.de gesucht habe, und Tutorials, bzw. CodeSnippets angesehen/getestet habe. Zu meiner Frage, wie finde ich den Pointer raus, z.B. bei WoW von den Leben, da das ja über DMA läuft..., Nun, ich finde meine Adresse, beispielsweiße : 0x049f0d = 7000 ; meine...



All times are GMT +2. The time now is 18:42.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.