Variabeln "var" ligger i funktionen test(). Du kan inte komma åt den variabeln från main().
#include <iostream>
using namespace std;
int main()
{
char var = 'a';
char *pek = &var;
cout << *pek << endl;
cout << var << endl;
return 0;
}
13 svar · 456 visningar · startad av taper lawyer
Variabeln "var" ligger i funktionen test(). Du kan inte komma åt den variabeln från main().
#include <iostream>
using namespace std;
int main()
{
char var = 'a';
char *pek = &var;
cout << *pek << endl;
cout << var << endl;
return 0;
}
Nu ser koden ut så här:
#include <iostream>
using namespace std;
int main()
{
char var = 'a';
char *pek = &var;
cout << pek << endl;
cout << var << endl;
cin >> var;
return 0;
}
Men varför skriver den ut denna text?
aá "
a
När du skriver ut din pekare så vet programmet inte hur stort utrymme som den pekar på, 1 eller 2 eller ännu fler tecken, då skriver programmet ut alla tecken tills den hittar ett null tecken ('\0'), när du däremot skriver ut en char så vet datorn att det bara är ett tecken och skriver därför bara ut ett tecken.
/Viktor
Hm, men hur skall jag göra då?
Det är en annan sak att skriva cout << *var och att skriva cout << var - i den första varianten avrefererar du pekaren, vilket innebär att du säger att du vill skriva ut en char, så då skulle det bara skrivas ut ett "a". I den andra varianten, dock, skickar du pekaren till utskrift, och det råkar ju falla sig som så att i C, och delvis i C++, används charpekare som strängar, och de antas som Viktor påpekade fortsätta till första bästa nulltecken.
Jag kom fram till detta:
#include <iostream>
using namespace std;
int main()
{
char var = 'a';
char *pek = &var;
cout << *pek << endl;
cout << var << endl;
cin >> var;
return 0;
}
#include <iostream>
#include <stdlib.h>
using namespace std;
char var = 'a';
char *pek = &var;
int main()
{
cout<<var<<endl;
cout<<*pek<<endl;
system("PAUSE");
return 0;
}
Pekare är kanske inte så givet. Men om man betraktar programmet man skriver som en samling adresser och inte endast som att man ska utföra operationer så blir det lite enklare. Genom pekaren får man tillgång till adresserna och dess innehåll.
Pekare används med fördel till listor, arrayer och funktioner som voidpekare (generella pekare). Det i tråden givna exemplena säger inte så mycket då det först med en reell användbarhet som kronan brukar trilla ned :)
Ni har inte lust att skriva ett litet exempel på hur man med fördel använder pekare, så kanske poletten (kronan) trillar ner för mig också? :)
Hmm... för en tid sedan kastade jag ihop en räknare som exempel på hur man kan traversera expressions (fråga här i forumet). Där finns en liten variant av hur man kan använda pekare för att plocka bit för bit av en sträng (input till räknaren): http://www.webforum.nu/showthread.php?s=&postid=773864#post773864
Annars kan du ju beakta följande:
void func1(char *pek)
{
*pek='a';
}
void func2(char var)
{
var='a';
}
Vilken av funktionerna har förändrat sin parameters värde när funktionen terminerat?
Vad det gäller funktionsparametrar så kastas normalt parametervärden (eller kopior av värden/a) bara upp på stacken för att sen användas i funktionen. När funktionen terminerar försvinner stacken och då även värdena (parametrarna). Men om man skickar en pekare så skickar man inga värden, utan kopia på adressen till värdet varpå det är skitsamma om stacken försvinner då funktionen ju fått access direkt och inga kopior.
En lista:
typedef struct alist{
void *data;
alist *next;
};
I detta onyanserade C - kodexempel är varje segment (ovan kod) ett element i listan och 'void *data' en pekare till vilken datatyp som helst (mao en generell pekare) och 'alist *next' en väg till nästa element i listan. Det hade blivit otympligt för att inte säga omöjligt att försöka få till (kod ovan) listan utan pekare... krävs ju dock att man skapat (allokerat) minne som pekarna kan peka på.
taper lawyer skrev:
Ni har inte lust att skriva ett litet exempel på hur man med fördel använder pekare, så kanske poletten (kronan) trillar ner för mig också? :)
Det finns ju massor av tutorials.
Det bästa exemplet, anser jag, är att själv sätta sig ner och pilla ihop en länkad lista, så kommer man på massa bra saker pekare kan användas till.
Jag hittade en rätt välskriven artikel om pekare för den som inte vet vad det är eller hur dom fungerar.