Article View: pl.comp.objects
Article #4647Re: Prawda o C++
From: Dariusz Slusarczyk
Date: Wed, 20 Jan 1999 19:22
Date: Wed, 20 Jan 1999 19:22
73 lines
3053 bytes
3053 bytes
Artur Kidzinski wrote:
> Chyba nigdy nie uzywales tablic w Pascalu...jedyna przewaga C jest
> odwolowyanie sie za pomoca wskaznikow...a dalej niestety popatrz
> tablica : array['a'..'z'] of char; ...zrobisz cos takiego bez sztuczek
> z makrami w C ???
o jakiez to sztuczki z makrami chodzi?
a moze styknie gdy odpowiednio zmodyfikuje index zanim podzialam na
tablicy np. przez odjecie 'a'
tablica[jakis_index-'a']=x; //gdzie jakis_index nalezy do <'a','z'>
albo zupelnie oleje sprawe i poswiece pierwszych 'a' bajtow, wtedy nie
bede musial modyfikowal indexu
np.
char tablica['z'+1];
//chyba nie musze mowic dlaczego 'z'+1? :)
for(int i='a';i<='z';i++) //wykorzystujemy tylko 'z'-'a'+1 bajtow
tablica[i]=i;
a moze jeszcze lepiej zrobie magiczna sztuczke :) na wskaznikach jak np
char array['z'-'a'+1];
char*ptr=&array[-'a'];
teraz wpisujac
ptr['a']=jakies_cos;
w rzeczywistosci modyfikujemy
array[0]=jakies_cos;
nie trza modyfikowac indexu przez np. odejmowanie 'a' za kazdym razem
gdy chcemy podzialac na tablicy, dodatkowo nie ma straty RAMu jak to
bylo w poprzednim przypadku, a indexujemy sobie ladnie od 'a' do 'z'
czyli chyba o to chodzi
eh te prymitywne wskazniki :)))
dla niedowiarkow przykladowy kod
#include <stdio.h>
void main()
{
int x=0; //taki sobie ogranicznik :>
char trueArray['z'-'a'+1];
int y=0; //taki sobie ogranicznik :>
char*array=&trueArray[-'a']; //i juz mamy array['a'..'z'] :)
for(int i='a';i<='z';i++) //lamuchowata indexacja od 'a' do 'z'
array[i]=i;
printf("\n%d\n",x); //to na dowod, ze x nie zostalo nawet tkniete
for(i='a';i<='z';i++) //lamuchowata indexacja od 'a' do 'z'
printf(" %c ",array[i]);
printf("\n%d",y); //to na dowod, ze y nie zostalo nawet tkniete
}
no... ja tu zadnych makr nie widze
ostatecznie mozna uzyc
#define TERMINATOR 'z'+1
i wtedy we FORkach zamiast tego smiesznego i<='z' bedziemy mieli
rasowe :) i<TERMINATOR
a najlepiej zabudowac wszystko do klasy, przeciazyc operator[] i wiecej
sie tym nie przejmowac :}
> Po pierwsze jezeli wciagasz C++ to zaczyna sie inna bajka....ale
> tablice w C sa naprawde prymitywnym typem...to poprostu zwarta kupka
> bajtow...jedyne co fajne to rozne ciekawe(i dziwne) sposoby ?
> odwolywania sie od tej kupki...
a czym niby mialaby byc jak nie zwarta qpka bajtow?
> Artur K.
--
marines()
{
return Dariusz_Slusarczyk;
}
Technical Details
Message-ID:
<36A623E1.A4AF7B72@zeus.polsl.gliwice.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!ict.pwr.wroc.pl!m2n-gate.okapi.usenet.plShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!news.task.gda.pl!ict.pwr.wroc.pl!m2n-gate.okapi.usenet.pl From: marines@zeus.polsl.gliwice.pl (Dariusz Slusarczyk) Newsgroups: pl.comp.objects Subject: Re: Prawda o C++ Message-ID: <36A623E1.A4AF7B72@zeus.polsl.gliwice.pl> Date: 20 Jan 99 19:22:40 GMT Sender: objects@sprocket.ict.pwr.wroc.pl Organization: Lista dyskusyjna objects@sprocket.ict.pwr.wroc.pl Lines: 74 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit