» »

kazalci in polje

kazalci in polje

Hatefild ::

Zanima me kako bi v c++ shranil naprimer polje v kazalec na kazalec?

naloga!

char polje[]="abcd";
**char besedilo;
kako sedaj skopirat iz polje v besedilo, poskuso sem ze vse mogoce pa ne uspeva, zato prosim pomagajte,
ker bom drugace znorel!

za pametne odg. se zahvaljujem!

Hatefild ::

No malo sem zaj.
naloga

char polje[]="abcd";
char **besedilo;

sedaj kako shraniti polje v besedilo?

rasta ::

Sploh te ne razumem, kaj hočeš.
Ti bi rad, da ti besedilo kaže na polje?
besedilo = &polje;

Ali pa bi rad fizično skopiral vsebino polje v
enodimenzionalno polje kazalcev (char *besedilo[1]) na char (se pravi c stringov)?
/* tole je C koda in ni v redu v C++ */
#include <stdlib.h>
#include <string.h>
int main() {
  char polje[] = "abcd";
  char **besedilo;
  besedilo = calloc(2,sizeof(&polje));
  besedilo[0] = malloc(sizeof(polje));
  besedilo[1] = NULL;
  strcpy(*besedilo,polje);
  /* naredimo nekaj s 'beseilo'*/
  free(besedilo[0]);
  free(besedilo);
  return 0;
}


In to v C++? V C++ se izogibaj kazalcem, raje uporabljaj std::string in std::vector<std::string>; če pa že moraš imeti v kazalcih, pa zgoraj zamenjaj calloc in malloc z new in free z delete.

Pa zjasni se, kaj sploh hočeš, ker mi niti približno ni jasno.

OwcA ::

Kazalcev na kazalce se v C++ eksplicitno ne uporablja več, za to imaš reference. Edina izjema so polja kazalcev, ker je tudi polje pravzaprav le kazalec, pa še uporabi teh se je bolje izogniti in uporabiti, kot je predlagal rasta, std::vector<T*>.
Otroška radovednost - gonilo napredka.

d-mon ::

Tvoj pointer besedilo je deklariran tako, da shranja pointerje na pointerje.
Ker pa polje ni pointer, ga v besedilo ne mores shranit.

Kot ce bi rekel:
int x[10];
int *y;
y = &x; //kaze na prvi element.
y++; //prestavis se na naslednji element aka. x[1].

Ti tu uporabljas char in ne int.

Ce bi pa zelel, da bi delalo to kar ti zelis, moras pa imeti npr. char *polje[10] (tabelo 10 pointerjev) in potem ko je polje ze pointer lahko potem reces
besedilo = &polje; //kar bi shranil NASLOV pointerja in ne naslov kam pointer kaze.

Zato, je vse skupaj neuporabno :))

Glede sintakse, mogoce kaj kiksa, ker nisem kompajlal.
[D-mon]

rasta ::

> Glede sintakse, mogoce kaj kiksa, ker nisem kompajlal.
Ja, kiksa.
Z vrstico:
int x[10];

si deklarial kazalec na int, ki kaže na rezervirano območje na stacku. Zato se to ne prevede:
y = &x;

Pravilno bi bilo:
y = x[0]; /* ali pa tudi y = x */
;

> Zato, je vse skupaj neuporabno :))
Stvar je pa zelo zelo uporabna. Samo v C++, kjer je navoljo toliko template razredov, je brezveze pisat nepregledno C kodo in tvegar razne napake povezane s kazalci (overflow, memory leak ...).


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] Funkcija vrnitev kazalca

Oddelek: Programiranje
101107 (823) MrStein
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
656824 (5897) MrBrdo
»

[C] Sortiranje preštetih črk

Oddelek: Programiranje
61343 (1179) BigBoobs
»

[C/C++] pointerji in reference

Oddelek: Programiranje
111943 (1767) Matako
»

strcpy reče segmatation fault

Oddelek: Programiranje
101436 (1387) MasterMind

Več podobnih tem