• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wskaźniki c++

0 głosów
174 wizyt
pytanie zadane 28 lipca 2020 w C i C++ przez Feszyn F Flora Początkujący (320 p.)

Witam ,chciałbym  uzyskać odpowiedź na pytanie dlaczego możemy zapisać po prostu wskaźnik funkcji tak .

#include <stdio.h>
#include <iostream>
using namespace std;

int dodawanie()
{
    return 2+3;
}

int main() {
    int (*wsk_funkcji)();
    wsk_funkcji = dodawanie; // tutaj nie jest  potrzebny ampersand 

    cout <<dodawanie;
    return 0;
}

Rozumiem ,że w tablicy działa to tak ,że nazwa  wskazuje na pierwszy element ,dlatego znak ampersand nie jest konieczny ,dlaczego wskażnik funkcji możemy zapisać tak jak wskażnik tablicy i dlaczego tutaj  jest błąd.

#include <stdio.h>
#include <iostream>
using namespace std;


int main() {
     int zmienna =5;
     int *wsk;
     wsk = zmienna; //tutaj jest konieczny ampersand 


}

 

1 odpowiedź

0 głosów
odpowiedź 28 lipca 2020 przez draghan VIP (106,230 p.)
wybrane 28 lipca 2020 przez Feszyn F Flora
 
Najlepsza

Wyjaśnienie łopatologiczne:

Ponieważ kompilator wie, że identyfikator "dodawanie" oznacza nazwę funkcji, a z funkcją możesz zrobić w zasadzie tylko dwie rzeczy: wywołać i pobrać adres. Wywołanie wymaga zapisania nawiasów po identyfikatorze funkcji. Jeśli zaś nie podasz tych nawiasów, to kompilator - w dobrej intencji - uznaje że chcesz wziąć adres tej funkcji i pozwala na zapis bez ampersandu.

Dla sytuacji ze zmienną to nie przejdzie, bo jak użyjesz tylko samego identyfikatora zmiennej (w kontekście r-value), to kompilator uzna że chcesz pobrać wartość tej zmiennej.

Podpórka formalna:

Standard definiuje niejawną konwersję z funkcji do wskaźnika na nią, dokładnie tak samo jak z tablicy do wskaźnika na jej pierwszy element.

Podobne pytania

0 głosów
1 odpowiedź 762 wizyt
pytanie zadane 30 listopada 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 412 wizyt
pytanie zadane 14 listopada 2019 w C i C++ przez juske00 Początkujący (370 p.)
0 głosów
2 odpowiedzi 421 wizyt
pytanie zadane 2 grudnia 2024 w C i C++ przez adam234345 Początkujący (400 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...