Gå til innhold

char referanse argument


Anbefalte innlegg

Videoannonse
Annonse

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 av søppel
Lenke til kommentar

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 av saboi
Lenke til kommentar

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 av søppel
Lenke til kommentar

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 av A_N_K
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...