Inițializarea unui vector de char-uri
Last Updated: May 30 2016 14:01, Started by
worm94
, May 29 2016 17:19
·
0
#1
Posted 29 May 2016 - 17:19
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
Posted 29 May 2016 - 18:05
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
Posted 29 May 2016 - 18:17
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
Posted 29 May 2016 - 18:23
Aici declari o variabila locala valori de tipul vector de char și o inițializezi.
worm94, on 29 mai 2016 - 17:19, said: ticTacToe::ticTacToe() { char valori[11] = { 'o','1','2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8' ,'9' }; } 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
Posted 29 May 2016 - 18:36
#6
Posted 29 May 2016 - 18:53
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
Posted 29 May 2016 - 18:54
Si nu ti se pare ca in constructor ai alta variabila de fapt ?
|
#8
Posted 30 May 2016 - 10:54
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
Posted 30 May 2016 - 11:19
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
Posted 30 May 2016 - 11:36
Vectorii din C sint pentru fraieri. Foloseste std::array.
|
|
#11
Posted 30 May 2016 - 11:42
Pana sa ajunga sa foloseasca C++, trebuie sa priceapa notiunile de baza din C (nu mai dezbatem aici teoria C-ul din C++).
|
#12
Posted 30 May 2016 - 12:06
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?
Mosotti, on 30 mai 2016 - 11:36, said:
Vectorii din C sint pentru fraieri. Foloseste std::array. Edited by worm94, 30 May 2016 - 12:20. |
#13
Posted 30 May 2016 - 12:25
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
Posted 30 May 2016 - 12:26
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
Posted 30 May 2016 - 12:53
Ieii s-a făcut lumină. )
Mulţumesc mult @negru_laurenţiu. MarianG, 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) |
|
#16
Posted 30 May 2016 - 14:01
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users