c++: Ökningsoperatorn (++) på pekare?

Här diskuteras programmering och utveckling
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

c++: Ökningsoperatorn (++) på pekare?

Inlägg av Christian Holmberg »

Varför går det inte att andvända ökningsoperatorn direkt på pekare ( se rad 17 av koden)? Varför måste man omge pekaren med parenteser ( se rad 11, 13 och 15 av koden)?

Se följande kod:

Kod: Markera allt

#include <iostream>

using namespace std;

int main (int argc, char *argv[]) {

	unsigned short int yourAge = 26;	 
	unsigned short int *pAge = &yourAge;

	cout << "your age is " << *pAge << endl;  // *pAge = 26
	(*pAge)++; // ökar *pAge med ett...		
	cout << "your age is " << *pAge << endl;  // *pAge = 27
	(*pAge)++; // ökar *pAge med ett...
	cout << "your age is " << *pAge << endl;  // *pAge = 28
	(*pAge)++; // ökar *pAge med ett...
	cout << "your age is " << *pAge << endl; // *pAge = 29
	*pAge++; // Här blir något galet...
	cout << "your age is " << *pAge << endl; // *pAge = <skräp> 

	return 0;
}
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: c++: Ökningsoperatorn (++) på pekare?

Inlägg av Konservburk »

Christian Holmberg skrev:Varför går det inte att andvända ökningsoperatorn direkt på pekare ( se rad 17 av koden)? Varför måste man omge pekaren med parenteser ( se rad 11, 13 och 15 av koden)?
Det har med operatorprioriteten att göra. Det är den som avgör i vilken ordning saker utförs när du utelämnar parenteser. I det här fallet har ++ högre prioritet än * och därför kommer *pAge++ att bli som om du hade skivit *(pAge++). Du tittar med andra ord på värdet som ligger intill i minnet. *variabel++ är praktiskt i slingor där du går igenom data i allokerade minnesområden.
Christian Holmberg
Inlägg: 194
Blev medlem: 02 nov 2006, 22:02
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: c++: Ökningsoperatorn (++) på pekare?

Inlägg av Christian Holmberg »

Så det är så det ligger till. Tackar och bockar för svaret.
Skriv svar

Återgå till "Programmering och webbdesign"