[elektro] PIC C sztring

SZIGETI Szabolcs szigiszabolcs at gmail.com
Fri Feb 24 13:11:21 CET 2012


Hali!

Ez így van. A következő gyakorlatig minden C fordítóval  működik:

Van egy a tömbünk. Mondjuk int a[10].
Ennek 3. eleme a[3] ugye átírható pointerre így: *(a+3)  (mivel ugye a ==
&a[0], utána pedig pointer aritmetika)
Az összeadás kommutatív, tehát *(a+3) az *(3+a)
amely pedig az első pontot visszafelé követve 3[a].
Meglehetősen nagy zavart lehet ezekkel okozni, ha valahova ezt írjuk :-)

A stringekkel kapcsolatban ami keverhető, az az, hogy char *s és char s[]
ugyanaz, de a következő kettő nem ugyanaz:
char *a="valami"
char a[]="valami" (ez ugye char a[]={'v','a','l','a','m','i','\0'}; alak
egyszerűsített írásmódja.

Az első esetben "valami" egy string konstans, amit a complier akár csak
olvasható memóriába is rakhat, majd a egy erre mutató pointer lesz, amivel
nem biztos, hogy meg tudod változtatni a string tartalmát.

A második eseteben a egy pointer, amely egy tömbre (itt 7 eleműre) mutat,
amelyet a "valami" stringgel inicializálunk, de egyébként bármikor
változtatható.

Szabolcs


2012/2/24 Stonie <laca256 at gmail.com>

> Valamelyik könyv azt írta, nem is használja a "[]" jelölést, mert
> úgyis pointerekre fordul le, minek elfedni a működését :)
> L
>
> On Fri, Feb 24, 2012 at 9:16 AM, Hofferek Attila <hofi at soka.co.hu> wrote:
> > On Thu, 23 Feb 2012 23:34:57 +0100, Móczik Gábor wrote:
> >
> >> str2 = str1;    // nem str2 = &str1 !!!
> >
> > vagy str2=&str1[0];
> >
> >  :-)
> >
> > -----------------------------------------
> >          elektro[-flame|-etc]
>
> -----------------------------------------
>          elektro[-flame|-etc]
>


More information about the Elektro mailing list