BloodSkull Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 er det mulig og sende char array reference argument til en funksjon, koden under virker jo ikke, får det til med pointers men vil gjerne vite om det går med referanse char text[]="abc"; format(text); void format(char &text) { } takk... Lenke til kommentar
saboi Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 referanser er konstante, derfor kan du ikke hoppe til neste adresse som du kan med pekere. ergo kan du ikke ha en referanse til en char array. Lenke til kommentar
søppel Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 (endret) Ser ikke helt poenget sånn uten noen kontekst, men dette er i det minste mulig: #include <iostream> using namespace std; // "..sende char array reference.." array/peker går delvis for det samme. void format(char*& text) { cout << text << endl; } // format int main() { char text[] = "abc"; char* temp = text; format(temp); return(0); } // main Edit: Altså, har du kun statiske data for text, så gjør du jo dette: ... char* text = "hei"; format(text); format("cba"); ... Derimot hvis du har dynamiske, så bruker du: ... char* text = static_cast<char*>(malloc(.....)); // eller C++'s new .. format(text); ... ..og disse to tingene fungerer - og er gyldige -- så hvorfor? Det har ingen hensikt å bruke char[] sånn jeg ser det uten noen sammenheng sånn-i-farta-her. Endret 30. desember 2004 av søppel Lenke til kommentar
Dead_Rabbit Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 (endret) char* text = static_cast<char*>(malloc(.....)); // eller C++'s new ..Hva er egentlig forskjellen? På malloc og new? Edit: Tok noen edit`er til før jeg klarte å quote gitt:P Endret 31. desember 2004 av zirener Lenke til kommentar
saboi Skrevet 30. desember 2004 Del Skrevet 30. desember 2004 (endret) new kaller konstruktøren for objektet du allokerer og er typesafe. malloc returnerer bare en void* til et minneområde. så jeg ser ikke helt poenget med å bruke malloc sånn som søppel gjør og så bruke en c++-cast til char*. det er ikke vits å blande c alloc og c++-caster når man bare kan skrive new siden du allikevel binder deg til c++ mht static_cast.. men noen liker vel kanskje å gjøre ting tungvindt/dårlig/whatever. hva vet vel jeg Endret 30. desember 2004 av saboi Lenke til kommentar
søppel Skrevet 31. desember 2004 Del Skrevet 31. desember 2004 (endret) Er vel ikke helt heldig det der nei - går fort noen ganger. Burde holdt meg til enten C++ eller C kanskje. Men må legge til at malloc/free er litt kjappere enn new/delete om jeg ikke tar helt feil, og når man skal allokere objekter uten konstruktør, innebygde f.eks., så er malloc/free greie tror jeg - selv under C++. (jeg tenkte ikke på dette da jeg skrev koden - så det er tilfeldig at det er slik) Edit: #include <iostream> #include <ctime> using namespace std; int main() { char* s; clock_t t = clock(); for(unsigned int i = 0; i < 10000000; i++) { s = static_cast<char*>(malloc(1000)); free(s); } cout << clock() - t << endl; t = clock(); for(unsigned int i = 0; i < 10000000; i++) { s = new char[1000]; delete[](s); } cout << clock() - t << endl; return(0); } // main ..er i hvertfall det her - men det kan hende det varierer fra implementasjon til implementasjon. Endret 31. desember 2004 av søppel Lenke til kommentar
A_N_K Skrevet 31. desember 2004 Del Skrevet 31. desember 2004 (endret) Så vidt jeg vet skal man *ikke* caste resultatet av en malloc i ANSI C, for C++-objekter er det nok smartest å holde seg til new siden operator new kan være overloadet. Edit: Ser ut som C++ og ANSI C er uenige når det gjelder malloc og casting gitt :\ Hvor var det nå jeg fant denne advarselen. Ah ... Ser ut som det har gått mye i C her i det siste; en C-kompilator vil ikke si fra om du har glemt å inkludere en deklarasjon av malloc, og vil i mangel av en deklarasjon tro at malloc returnerer en int. Hvis man i tillegg caster får man null advarsel. Altså ikke noe aktuelt problem hvis man skriver C++, men greit å ha i bakhodet hvis man en gang må skrive ANSI C. Endret 31. desember 2004 av A_N_K Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå