Diskuze: pointer na jendorozmerne pole

C++ C a C++ pointer na jendorozmerne pole

Avatar
ondra181
Člen
Avatar
ondra181:

Zdravím, už znovu sa na vás obraciam a prosím vás o pomoc, mám 2 funkcie a main potrebujem v 1. funkcii načítať do prvkov pola poslať to do mainu a potom do druhej funkcie....vedel by mi niekto poradiť s pointermi? skúšal som vytvoriť v maine int cena[200], pocet; niekde som to tak videl a potom som posuval do funkcie1(int cena[], int pocet)v returne som dava return cena; a pri volan9 v maine som daval funkcia1(cena, pocet); nefunguje mi to vobec :/ ak by mi niekto vedel pomôcť budem velmi vďačný

 
Odpovědět 18.11.2012 15:58
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na ondra181
Drahomír Hanák:

V Céčku se musí pole předávat pointerem. Ale je s tím strašně moc práce, je tam vysoká chybovost a nedá se to nijak testovat.

Jelikož je v Céčku pole pointer (resp. pole[i] == *(pole+i)), lze to udělat asi takhle:

void fce1(int *cena, int pocet);

Pak se funkci musí předat adresa proměnné - např. fce1(&cena, 10)

To ovšem ovlivňuje proměnnou, kam pointer ukazuje, z čehož plyne ta velká chybovost. Navíc je nelogické, že funkce upravuje proměnné někde jinde. Měla by dostat hodnotu a vrátit výsledek nezávisle na okolí. Jinak to ale myslím v Céčku udělat nejde.

 
Nahoru Odpovědět 18.11.2012 16:08
Avatar
 
Nahoru Odpovědět 18.11.2012 16:25
Avatar
ondra181
Člen
Avatar
ondra181:

a dá sa nejak vrátit hodnota pola bez použitia pointerov?

 
Nahoru Odpovědět 18.11.2012 16:28
Avatar
ondra181
Člen
Avatar
Odpovídá na Lukáš Hruda (Luckin)
ondra181:

nefunguje error mi to nehlásí ale nenačítá do pola nič a vypisuje len náhodné hodnoty ktoré sú tam od začiatku lebo som pole nenuloval...

 
Nahoru Odpovědět 18.11.2012 16:32
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Drahomír Hanák:

Z toho kódu funkcie1(int cena[], int pocet) je jasné, že to nefunguje ;) V Céčku takhle pole prostě nejde předávat v parametru funkce.

 
Nahoru Odpovědět 18.11.2012 16:34
Avatar
Odpovídá na Drahomír Hanák
Lukáš Hruda (Luckin):

Ale jde, jako parametr funkce je int cena[] úplně to samý jako int* cena.

 
Nahoru Odpovědět 18.11.2012 16:36
Avatar
Kit
Redaktor
Avatar
Odpovídá na ondra181
Kit:

Zkusil jsem si to udělat jako funkci vracející pointer. Třeba si z toho vybereš:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 8

int *gener() {
  int *mem,*ptr,i;
  mem=(int *)malloc(SIZE*sizeof(int));
  ptr=mem;
  for(i=0;i<SIZE;i++) {
    *ptr=i*3;
    ptr++;
  }
  return mem;
}

int tisk(int *mem) {
  int *ptr,i;
  ptr=mem;
  for(i=0;i<SIZE;i++) {
    printf("%d\n",*ptr);
    ptr++;
  }
}

int main() {
  int *p;
  p=gener();
  tisk(p);
}
Nahoru Odpovědět 18.11.2012 16:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
ondra181
Člen
Avatar
ondra181:

int nacitaj_pocet_dni(){

char c;
int i,j=0,dni[200];

FILE *fr = fopen("zajazdy­.txt", "r");

while (feof(fr) == 0){
for(i=1;i<=7;i++){
c=0;
if(i == 7){
fscanf(fr,"%d\n\n", &dni[j]);
printf("%d\n", dni[j]);
}
else{
while(c != '\n' && c!= EOF){
c=getc(fr);
if(c == EOF){
break;
}
}
}
}
j++;
}

return 0;

}

int main(){

char c;

do{
c=getchar();

else if(c == 'n'){
nacitaj_pocet_dni();
}

}
while(c != 'k');

return 0;

}

 
Nahoru Odpovědět 18.11.2012 16:38
Avatar
Kit
Redaktor
Avatar
Odpovídá na ondra181
Kit:

Používej tlačítko "Vložit zdrojový kód", ať se to dá číst.

Nahoru Odpovědět  +1 18.11.2012 16:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.