Olen tässä päässyt alkuun ohjelmointiharrastuksen kanssa. C-kieleen olen tutustunut. Mutta mitä eroa on näillä vai onko mitään:
int *x;
int * x;
int* x;
Kokeilin noita pienellä ohjelmalla enkä huomannut mitään eroa toiminnassa. Eli tarkoittavatko nuo kaikki pointterin määrittelyä ja onko niillä käytön suhteen mitään eroa?
Asteriksin (*) käyttö osoittimien kanssa
9
580
Vastaukset
- samaa
int pointeri x:ään.
välilyönnit ei lasketa, hyvä ohjelmointitapa on int *x;- nyyppä_____
Ok, kiitti selvennyksestä. :-)
- sentään?
(Ampukaa jos sanon väärin) Mielestäni "int* x;" tarkoitaa tyyppiä "osoitin int-tietotyyppiin", mutta "int *x;" on osoitin "int-tietotyyppiin". Jos laittaa "int* a,b;" niin sekä a että b ovat osoittimia, mutta "int *a, b" vain a on osoitin, mutta b pelkkä int.
Kun määrittelee vain yhden muuttujan, niin nämä ovat sinänsä yhtäpitäviä, mutta ero kuitenkin on käsittääkseni olemassa. sentään? kirjoitti:
(Ampukaa jos sanon väärin) Mielestäni "int* x;" tarkoitaa tyyppiä "osoitin int-tietotyyppiin", mutta "int *x;" on osoitin "int-tietotyyppiin". Jos laittaa "int* a,b;" niin sekä a että b ovat osoittimia, mutta "int *a, b" vain a on osoitin, mutta b pelkkä int.
Kun määrittelee vain yhden muuttujan, niin nämä ovat sinänsä yhtäpitäviä, mutta ero kuitenkin on käsittääkseni olemassa.Kyllä sen pitäisi olla aivan sama, mihin ne välilyönnit laittaa (tai montako niitä on) osoittimen määrittelyssä. int *x = int* x = int * x = ..
Jos nyt käsitin oikein, niin tuota jälkimmäistä mitä meinaat, ei voi olla olemassakaan. Osoitin pitää olla aina johonkin konkreettiseen asiaan, kuten osoitin jonkin muuttujan muistipaikkaan, esim. int luku;int *x=&luku. "int-tyyppi" on lähinnä abstrakti käsite, johon ei siis voi viitata millään (tai mitenkään). Näin ollen int *a, b olisi sama kuin int* a, b.- coder
sentään? kirjoitti:
(Ampukaa jos sanon väärin) Mielestäni "int* x;" tarkoitaa tyyppiä "osoitin int-tietotyyppiin", mutta "int *x;" on osoitin "int-tietotyyppiin". Jos laittaa "int* a,b;" niin sekä a että b ovat osoittimia, mutta "int *a, b" vain a on osoitin, mutta b pelkkä int.
Kun määrittelee vain yhden muuttujan, niin nämä ovat sinänsä yhtäpitäviä, mutta ero kuitenkin on käsittääkseni olemassa.'Jos laittaa "int* a,b;" niin sekä a että b ovat osoittimia, mutta "int *a, b" vain a on osoitin, mutta b pelkkä int. '
Ei ole näin. Molemmissa tapauksissa vain a on pointteri, b normaali int-muuttuja. - näin on
Mik26 kirjoitti:
Kyllä sen pitäisi olla aivan sama, mihin ne välilyönnit laittaa (tai montako niitä on) osoittimen määrittelyssä. int *x = int* x = int * x = ..
Jos nyt käsitin oikein, niin tuota jälkimmäistä mitä meinaat, ei voi olla olemassakaan. Osoitin pitää olla aina johonkin konkreettiseen asiaan, kuten osoitin jonkin muuttujan muistipaikkaan, esim. int luku;int *x=&luku. "int-tyyppi" on lähinnä abstrakti käsite, johon ei siis voi viitata millään (tai mitenkään). Näin ollen int *a, b olisi sama kuin int* a, b.Testailin hieman ja noinhan se menee, hyvä että korjasit. Vetelen pipoa hieman syvemmälle ja muistan tämän vastedes :)
"Jos nyt käsitin oikein, niin tuota jälkimmäistä mitä meinaat, ei voi olla olemassakaan."
Et käsittänyt oikein, mutta sillä ei ole enää merkitystä. - nyyyppä___
coder kirjoitti:
'Jos laittaa "int* a,b;" niin sekä a että b ovat osoittimia, mutta "int *a, b" vain a on osoitin, mutta b pelkkä int. '
Ei ole näin. Molemmissa tapauksissa vain a on pointteri, b normaali int-muuttuja.Kiitos kaikille vielä kerran. :-)
- Mistä tiedämme
Kielen määrittelyä huolellisesti lukeva tietää, että nämä ovat samoja, koska ne koostuvat neljästä eri "tokenista" (tätä ei voi suomentaa merkiksi, joten sanon, että tunniste). C-kielessä kirjaimista, numeroista ja _-merkistä (alaviiva) voi muodostaa tunnisteita, kunhan ei aloita numerolla. Siten int on tunniste, ja toisaalta myös kielen varattu sana. * on tunniste, joka tässä tarkoittaa pointteria. Joskus se voi tarkoittaa kertolaskua, mutta näissä ei käytännössä mene sekaisin.
Pikku x on tunniste, joka määrittää muuttujan. Sillä ei ole valmiiksi merkitystä, joten se saa muista tunnisteista merkityksen. Tässä nyt selviää, että se on int*-tyyppiä, joten kääntäjä ei herjaa mitään. Herjauksen näkee, kun käyttää määrittelemätöntä nimeä, vaikkapa näin:
int main(){
return keksin_itse;
}
Tämä ei siis ole laillinen ohjelma.
Viimeinen tunniste on lausekkeen lopettava puolipiste ;.
Välien määrällä selvästi erillisten tunnisteiden välissä ei ole merkitystä, ja koska kysymyksessäsi on selävsti erillisiä tunnisteita, välit eivät vaikuta.
Vaikkapa int-sanaa ei saa jakaa: "in t" olisi kaksi tunnistetta peräkkäin, eikä tarkoita enää yhtään samaa asiaa kuin int.
Välillä on merkitystä esim. ja -> -operaattoreiden kanssa. Jos sen nimittäin laittaa tuohon väliin, tulee ja - >, jotka ovat aivan eri asioita. Jälkimmäinen ei edes tarkoita mitään kielen kannalta merkityksellistä.
Kuitenkin vaikkapa *- ei tarkoita mitään operaattoria yksikseen, joten se tulkitaan aina kertolaskuksi ja negaatioksi. Se voisi olla merkityksellinen vaikka näin:
a = a *- 1;
Pikku a:n arvoksi asetetaan se itse kerrrotunna miinus yhdellä. Välttämättä ei ole selvin tapa sanoa asia.
Toivottavasti C-oppaassasi selitetään tämä tarkasti. Jos ei, niin se on syytä joskus oppia, että osaa kuvitella miten kääntäjä "näkee" lähdekoodin, eikä tee hassuja virheitä.- Undefined
"Viimeinen tunniste on lausekkeen lopettava puolipiste ;."
C-kielessä puolipiste ei päätä lauseketta vaan lauseen.
Mitä alkuperäiseen kysymykseen tulee, niin suositeltavampaa on mielestäni kirjoittaa tähtimerkki kiinni muuttujan nimeen:
int *a = 0;
Tämä siksi, että joissakin tapauksissa se selventää huomattavasti asioita. Esimerkiksi lauseen int* a, b; voisi helposti tulkita niin, että siinä esitellään kaksi osoitinta, vaikka todellisuudessa vain a esitellään osoittimeksi ja b tavalliseksi muuttujaksi. Suositeltavampi tapa on siis kirjoittaa tuo näin: int *a, b; jolloin heti ensi silmäyksellä näkee mitä lauseella tehdään.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Toiselle puolikkaalleni
Sinulla ei taida olla kaikki nyt ihan hyvin? Minua itketti eilen kauheasti, sinunko itkuja itkin? Kyllä kaikki selviää j422234- 251813
Katu täyttyy askelista...
Hyvää sunnuntaita ja hyvää jatkoa jos näin...Vettä sataa, mutta hyvä vaan, ainakin kasveille.271445- 1091274
Näin susta unta
Teit siinä temppuja ja kurkit huomaanko. Niinkuin sun tarttis sitä epäillä. Öitä tuimalle!151259- 181035
Tiedätkö nainen sen tunteen
Kun toinen tulee jossain vastaan. Naama leviää hymyyn kuin hangonkeksi. Mulla on susta semmonen,tunne.71954Kauniit ihmiset ei ole sinkkuja, se on karu fakta
Ihmisessä on lähes poikkeuksetta aina jotain vikaa jos hän pysyy sinkkuna pitkään. Sori kun sanon tän näin suoraan, mut107874Kristinusko - epätoivoinen yritys pelastaa ihmiset jumalalta
Ei ole mitään sellaista, mitä pitää "pelastua". Lukuun ottamatta tietysti ”jumalan” (sen ei jumalan, joka väittää oleva333853Mikset päästä irti ja hae apua
Mt ongelmiisi. En vaan voi ikinä enää luottaa sinuun, pelkään sinua ja toivon löytäväni jonkun muun. Rahaa sulla on saad74846