Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Samsung Galaxy A35

Sfat pentru aprinderea automata a...

Masina de copt paine - pareri

Cum reactivez Google Maps?
 Conectare tableta X220la Tv

Femeile tinere nu mai vor sa munc...

La mulți ani @un_dac!

La multi ani de Sfantul Gheorghe&...
 Job - Facultate sau certificare

Deadpool & Wolverine (2023)

sistem hibrid eoliana + panouri +...

Outlook e muta pe Android
 Constructie Mun. Iasi. Casa P+1.

Cum mai rezolvati cu chiriasii ra...

Tastatura si mouse cu baterie int...

AC Gree duce la palpait de becuri
 

Inițializarea unui vector de char-uri

- - - - -
  • Please log in to reply
15 replies to this topic

#1
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
Salut,
Am dat peste o chestia mai ciudată care mă nelămurește, mai exact dacă inițializez în main un vector așa :
char valori[11] = { 'o','1','2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' };

E ok, însă dacă îl declar privat intr-o clasă și în inițializeez în constructor nu vrea :
ticTacToe::ticTacToe()
{
char valori[11] = { 'o','1','2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' };
}

Err:'=': cannot convert from 'initializer list' to 'char'
Dacă îi dau cu pointeri functiunează ok:
ticTacToe::ticTacToe()
{
valori = new char[11] {'o', '1', '2', '3', '4','5','6','7','8','9'};
}


E ok că merge cu pointeri dar nu înțeleg de ce nu vrea și fără.

#2
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
Daca spui ca ai 11 elemente atunci de ce initializezi doar cu 10 ?
Trebuie sa mearga, pune toata clasa pentru ca ceva nu-i bine.

#3
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
Păi declar 11 şi folosesc 10 pt că ultimul e pt \0.
Am mai completat clasa dar cam aşa arată:
class ticTacToe
{
private:
   char *valori;
   int player;
   int i;
   int choice;
   char mark;
public:
   ticTacToe();
   void bord();
   bool checkWin();
   void startGame();
};


Edited by worm94, 29 May 2016 - 18:19.


#4
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Aici declari o variabila locala valori de tipul vector de char și o inițializezi.

View Postworm94, on 29 mai 2016 - 17:19, said:

ticTacToe::ticTacToe()
{
	char valori[11] = { 'o','1','2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' };
}

Cred că ai dorit să să scri ceva de genul
class ticTacToe {
	char valori[11];

  public:
	ticTacToe();
};

ticTacToe::ticTacToe()
{
	valori = { 'o','1','2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' };
}

Iar în cazul ăsta nu merge pentru că valori este un echivalent cu pointer constant și nu poți modifica un pointer constant. Dar te poți folosi de lista de inițializare pentru membrii unei clase ca să obții un efect echivalent.

#5
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003

View Postworm94, on 29 mai 2016 - 18:17, said:

Păi declar 11 şi folosesc 10 pt că ultimul e pt \0.
Pai pune-l si pe \0 sa-ti iei de o grija.

View Postworm94, on 29 mai 2016 - 18:17, said:

Am mai completat clasa dar cam aşa arată:
Ai postat cu pointerul in loc de varianta cu problema ta !

#6
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
Dap, scuze
class ticTacToe
{
private:
char valori[11];//asa era inainte de pointer
int player;
int i;
int choice;
char mark;
public:
ticTacToe();
void bord();
bool checkWin();
void startGame();
};

@tavitu  spuneai că nu pot modifica un pointer constant dar eu acolo nu încercam să modific pointer-ul(nu-i dădeam o adresă) încercam doar să modific valorea la care pointează.

Edited by worm94, 29 May 2016 - 18:56.


#7
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
Si nu ti se pare ca in constructor ai alta variabila de fapt ?

#8
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
Ba da m-am trezit mai greu.
Aş mai avea o nelămurire cu privire la char-uri care atunci când mi-o explic mi se pare ok dar după iar mă răzgândesc :))
Deci atunci când declari un vectori de int-uri:
int val[10];

Având în vedere că un int ocupă 4 octeţi poţi declarea numere foarte mari(2 la 32), deci poti pune:
int val[10]={10,132432,75443};

Dar când declari un vector de char de exemplu cum era mai sus:
char val[10];

Pe fiecare poziţie a vectorului pote fi initializată doar cu câte o literă.

Întrebarea mea e de ce la int dacă e pe 4 octeţi poate fiiniţializate cu valori diverse dar un char doar cu 1 caracter. Adica ok  un caracter ocupă un octet dar si un int ocupa 4 si totusi poţi să-l iniţializez şi cu 1 si cu 100000.
La int dacă e pe 32 de biti se transformă nr respectiv, să zic 10 (1010) şi încape dar la char cum se transformă?
Am scris aici o groază şi nu cred că mă înţelege nimeni :)).  Doar că mă macină chestia asta..

#9
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
Si la vectorul char poti pune numere in loc de caractere, doar sa respecte domeniul de valori -128..127. Iar daca ai unsigned char atunci intervalul e 0..255.
Limitele sunt date aici: https://msdn.microso...y/s3f49ktz.aspx
desi poti si tu calcula cate valori poti stoca in acei biti respectiv octeti, nr. maxim de valori distincte e dat de 2 la puterea N unde N e nr. de biti.

Cand vorbim de numere zecimale, reprezentarea are diferite forme: https://en.wikipedia.../Floating_point

Calculatorul stie sa lucreze doar cu numere, caracterul e doar e reprezentare grafica a unor astfel de numere, fiind tot felul de conventii:
- https://en.wikipedia.org/wiki/ASCII
- https://en.wikipedia.org/wiki/Unicode

Edited by neagu_laurentiu, 30 May 2016 - 11:37.


#10
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Vectorii din C sint pentru fraieri. Foloseste std::array.

#11
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
Pana sa ajunga sa foloseasca C++, trebuie sa priceapa notiunile de baza din C (nu mai dezbatem aici teoria C-ul din C++).

#12
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
După ce am scris un răspuns de vreo 10 rânduri am avut inspiraţia de a mă uita peste tabela cu, coduri ascii şi acolo sunt 127 de valori pe care le poate reprezenta şi posibil că şi de asta e de la (-127,127). Dar pe partea de "-" ce intra sau dacă iau unsigned char (0,255) dupa numărul 127(care este si maximul din tabela ascii) si îî corespunde caracterul "DEL" ce anume se mai poate reprezenta pe restul de valori disponibile?

View PostMosotti, on 30 mai 2016 - 11:36, said:

Vectorii din C sint pentru fraieri. Foloseste std::array.
Da poate că ai dreptate dar mi se pare mult mai clar când este evident ce se întâmplă acolo. Poate o fi mai profi cum zici tu dat momentan ma limitez la chestiile pentru fraieri.

Edited by worm94, 30 May 2016 - 12:20.


#13
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,434
  • Înscris: 10.08.2005
Daca o sa-l numesti sir o sa-l intelegi mai usor, fiind o insiruire de elemente
Fiecare element are un numar de ordine (indexare)

Edited by MarianG, 30 May 2016 - 12:27.


#14
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
ASCII a inceput cand lumea folosea 7-bit, gasesti istoria pe net, de unde si limita la 127.
Reprezentarea valorilor peste 127 e data de sistemul de operare, de pagina de cod aleasa, de limba etc. Le vezi in Windows Caracter Map: http://symbolcodes.t...aprmapvista.gif

Edited by neagu_laurentiu, 30 May 2016 - 12:27.


#15
worm94

worm94

    Member

  • Grup: Members
  • Posts: 266
  • Înscris: 02.01.2015
Ieii s-a făcut lumină. :))
Mulţumesc mult @negru_laurenţiu.

View PostMarianG, on 30 mai 2016 - 12:25, said:

Daca o sa-l numesti sir o sa-l intelegi mai usor, fiind o insiruire de elemente
Fiecare element are un numar de ordine (indexare)
Da, dacă îl iei aşa îl înţelegi dar mă măcinau rău de tot chestiile care am încercat să le explic mai sus. :))

#16
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004

View Postneagu_laurentiu, on 30 mai 2016 - 11:42, said:

Pana sa ajunga sa foloseasca C++, trebuie sa priceapa notiunile de baza din C (nu mai dezbatem aici teoria C-ul din C++).
Omul foloseste deja C++. Asta daca nu cumva s-au bagat clase in C :w00t:

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate