Wypisywanie tablicy ze struktury

0

Może mi ktoś wytłumaczyć, bo ja za nic nie rozumiem dlaczego to tak działa? Najpierw kod:

#include <iostream>
#include <cstring>

const int Len = 40;
struct golf{
    char fullname[Len];
    int handicap;
};


void setgolf(golf &g, const char* name, int hc){
    for(unsigned int i=0; i<strlen(name); ++i)
        g.fullname[i]=name[i];
    g.handicap=hc;
}

void setgolf(golf &g){
    std::cin.getline(g.fullname,40);
    std::cin >> g.handicap;
}

void showgolf(const golf &g){
    std::cout << g.fullname << std::endl;
    std::cout << g.handicap;
}
 

Wywołanie funkcji:

#include <iostream>
#include "golf.h"

int main(){
    golf ann;
    setgolf(ann);
    showgolf(ann);
}
 

Chodzi o to, że funkcja showgolf wypisuje całą tablicę, zamiast wskaźnika na pierwszy element. Może mi to ktoś wytłumaczyć, bo jak dla mnie to jest irracjonalne, albo jakiś feature, albo ja o czymś nie wiem.

0

Ale z czym masz problem ?

#include<iostream>
using namespace std;

int main() {
    char* zmienna = "Czego sie spodziewales ?";
    cout << zmienna << endl;
    return 0;
}
0

pole fullname jest tablicą, więc dlaczego jest wypisywane nie jak tablica? dajmy na to, że uzupełnię ją tekstem "ala ma kota" no to wtedy 0 element to a, 1 to l itd. No i żeby to wypisać to wydaje mi się, że powinienem użyć pętli i po kolei wypisywać fullname[0], fullname[1] itd. Dlaczego tutaj, od razu pisząc cout << fullname wypisywana jest cala tablica?

0

Operator

<<

jest tak przeładowany nic w tym dziwnego...

0

Ba to: for(unsigned int i=0; i<strlen(name); ++i) g.fullname[i]=name[i];
możesz zastąpić: strcpy(g.fullname,name);
Wtedy będzie kopiować w czasie O(n) zamiast O(n2)

1 użytkowników online, w tym zalogowanych: 0, gości: 1