Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
Karlsson
Kreisi kasutaja
liitunud: 20.08.2004
|
14.10.2015 15:19:14
GNU C massiivi muutmine funktsioonis |
|
|
Oma lõbuks uurin C ja hetkel jäin toppama sellise probleemi juurde.
Oleks vaja funktsioonis sees massiivi muuta ja peale lõptutuid katseid on tulemus selline.
Sooviks jätta "int main" võimalikult muutmata kujule.
Spoiler
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void lisa_arvud(int *arvud[3]){
*&arvud[0] = 2;
*&arvud[1] = 4;
*&arvud[2] = 6;
}
void valjasta_arvud(int arvud[3]){
int i = 0;
while (i < 3) {
printf("%d => %d \n", i, arvud[i]);
i++;
}
}
void lisa_sonad(char * nimed[2][10]){
strcpy(*&nimed[0], "Esimene");
strcpy(*&nimed[1], "Teine");
}
void valjasta_sonad(char nimed[2][10]){
int i = 0;
while (i < 3) {
printf("%d => %s \n", i, nimed[i]);
i++;
}
}
int main()
{
int paaris[3];
char teg[2][10];
lisa_arvud(&paaris);
valjasta_arvud(paaris);
lisa_sonad(&teg);
valjasta_sonad(teg);
return 0;
}
|
|
|
Kommentaarid: 88 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
79 |
|
tagasi üles |
|
|
DoS
HV veteran
liitunud: 19.08.2002
|
14.10.2015 15:45:33
|
|
|
c:
|
void lisa_arvud(int arvud[3]){ arvud[0] = 2; /* ... */ } int main() { /* ... */ lisa_arvud(paaris); /* ... */ }
|
Teise massiiviga samamoodi.
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
|
Karlsson
Kreisi kasutaja
liitunud: 20.08.2004
|
14.10.2015 17:17:20
|
|
|
Tänan, töötas. Nüüd sarnane probleem "struct isikud" muutmisega. Veateateid pole, kuid nime ja vanust ei muudeta.
c:
|
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct isik { char nimi[20]; int vanus; }empty; struct isik isikud[2]; void lisa_nimed (struct isik tegelased[2]){ //OK strcpy(tegelased[0].nimi, "Kalle"); tegelased[0].vanus = 30; strcpy(tegelased[1].nimi, "Malle"); tegelased[1].vanus = 20; } void valjasta_isikud(struct isik tegelased[2]){ //OK int i = 0; while (i < 2){ printf("%s %d \n",tegelased [i ]. nimi, tegelased [i ]. vanus); i++; } } void muuda_isik (struct isik tegelane, char nimi[20], int vanus){ //vigane strcpy(tegelane.nimi, nimi); tegelane.vanus = vanus; printf("Muudetud isik %s \n", tegelane. nimi); } int main() { lisa_nimed(isikud); valjasta_isikud(isikud); //järgnev osa ei tööta muuda_isik(isikud[0], "Pille", 22); muuda_isik(isikud[1], "Ülle", 23); valjasta_isikud(isikud); return 0; }
|
|
|
Kommentaarid: 88 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
79 |
|
tagasi üles |
|
|
DoS
HV veteran
liitunud: 19.08.2002
|
14.10.2015 20:47:49
|
|
|
Praegu sa saadad muuda_isik funktsiooni isiku structi väärtuse ehk sisuliselt tehakse structist koopia, muudetakse seda ja originaal jääb alles.
Ehk siis pead saatma pointeri "&isikud[0]" ja funktsioonis esimeseks parameetriks "struct isik *tegelane" ja muutmiseks "strcpy(tegelane->nimi, nimi)" ja "tegelane->vanus = vanus".
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
|
Karlsson
Kreisi kasutaja
liitunud: 20.08.2004
|
15.10.2015 01:28:40
|
|
|
Selge, toimib. Lootsin ilma viideteta läbi ajada. Igatahes, oli abi!
|
|
Kommentaarid: 88 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
79 |
|
tagasi üles |
|
|
andresv
HV kasutaja
liitunud: 06.12.2004
|
15.10.2015 16:48:57
|
|
|
Kui pointereid ei taha kasutada, siis kasuta reference
c++:
|
void muuda_isik (struct isik &tegelane, char nimi[20], int vanus)
|
|
|
Kommentaarid: 5 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
5 |
|
tagasi üles |
|
|
Karlsson
Kreisi kasutaja
liitunud: 20.08.2004
|
15.10.2015 17:33:15
|
|
|
See annab süntaksi veateate C, kuid C++ toimib täiesti. Hea teada.
|
|
Kommentaarid: 88 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
0 :: |
79 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|