Vinnaren i pepparkakshustävlingen!
2016-11-22, 11:38
  #1
Medlem
Hej, jag har en lite fråga angående pointers.
Om man har en pointer

char* c = new char('F');

och sen en pointer till c

char** p_p_c = &c; //Displayar 'F'

Vad betyder & i detta sammanhang?
Varför skriver man det?
Brukar inte det va adressen?

en till fråga:

är det någon skillnad på att skriva
int* const
och
const int*
__________________
Senast redigerad av Dilectus 2016-11-22 kl. 12:05.
Citera
2016-11-22, 12:28
  #2
Medlem
char * är en pekare till en variabel av typen char. char ** är en pekare till en pekare av typen char. &x betyder adressen till variablen x.

const int * är en pekare till en const int, medan int * const är en const-pekare till en int.
Citera
2016-11-22, 12:46
  #3
Medlem
Demetrioss avatar
Citat:
Ursprungligen postat av Dilectus
Hej, jag har en lite fråga angående pointers.
Om man har en pointer

char* c = new char('F');

och sen en pointer till c

char** p_p_c = &c; //Displayar 'F'

Vad betyder & i detta sammanhang?
Varför skriver man det?
Brukar inte det va adressen?

Ja, & betyder "ta adressen av". Varje pointer är ju en adress och char** p_p_c innehåller en adress av char* c, dvs "pekar på" det. Varför är det konstigt?

Citat:
Ursprungligen postat av Dilectus
en till fråga:

är det någon skillnad på att skriva
int* const
och
const int*
Kod:
int i 5;

int * const  = &i;
NULL// error, pointer is constant
*8;   // bra
...
int const * = &i;
NULL// bra
*8;   // error, the value under pointer is constant
...
const 
int = &i;
NULL// bra
*8;   // error, the value under pointer is constant 
Citera
2016-11-22, 13:25
  #4
Medlem
okej jag tror jag är med på banan
Tack
Citera
2016-11-23, 04:04
  #5
Avstängd
Kan inte tänka mig någon anledning att ha en enskild pekare till en enskild pekare till en char/chararray.
Citera
2016-11-23, 18:43
  #6
Medlem
*sn0wflake*s avatar
Citat:
Ursprungligen postat av SuperSizeMe
Kan inte tänka mig någon anledning att ha en enskild pekare till en enskild pekare till en char/chararray.

Main?

Kod:
int main (int argc, char **argv) {
     return 0;
}
Citera
2016-11-24, 07:45
  #7
Moderator
RostigHinks avatar
En regel är att const alltid gäller det omedelbart till vänster utom då const står först i ett statement då det omedelbart till höger gäller. Se exemplet i en av posterna ovan.

Efter att ha hackat c++11 i några år har jag aldrig använt pekare till char-arrayer eller ens char-arrayer själva med undantag av char** argv. Allt sådant lägger jag i std::string. Vill jag peka på något använder jag helst std::unique_ptr och std::shared_ptr. Det som skulle kunna ersätta T* vore kanske std::weak_ptr men den har jag faktiskt än idag inte använt.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback