C++ * un & (pointeru sāga)

Visiem vienmēr šķiet, ka pointeri ir ļoti sarežģīti, bet īstenībā tā nav. Zemāk ar piemēriem izskaidrošu kādēļ visi vienmēr ir baigā starā par pointeriem.

Reference operator &

&
Bildē skaidri redzams, ka andy vērtība ir 25, bet šis te 25 glabājas atmiņas šūnā ar adresi 1776.

Tātad sanāk, ja ted = &andy, tad ted ir vienāds ar andy atmiņas šūnas adresi, respektīvi, ja koda izpildes laikā andy tiek mainīts, tad automātiski tiek mainīts arī ted, jo abi norāda uz vienu un to pašu atmiņas šūnu (or adresi, whatevaa).

Lai nejauktu lietas noskaidrosim kas notiek, ja fred = ted. Šeit vienkārši fred tiek piešķirta tā vērtība, kura pašlaik ir ted, respektīvi, fred norāda uz atmiņas šūnu ar adresi 1776.

Dereference operator *

*
Bildē tiek izskaidrots bob = *ted. Pievienojot zvaigznīti mēs norādam, ka gribam saņemt vērtību uz kuru norāda ted nevis atmiņas šūnas adresi uz kuru norāda ted. Ja zvaigznīte netiktu pievienota tad bob būtu vienāds ar ted, bet ted ir norāde uz atmiņas adresi 1776. Abiem operatoriem ir pilnībā pretējas nozīmes.

Respektīvi:

& ir reference operator un var tikt interpretēts kā “address of”
* ir dereference operator un var tikt intepretēts kā “value of”

Tātad visi zemāk esošie apgalvojumi ir patiesi:

andy == 25
&andy == 1776
ted == 1776
*ted == 25

Programmas piemērs

int main () {
   int firstvalue, secondvalue;
   int * mypointer;

   mypointer = &firstvalue;
   *mypointer = 10;

   mypointer = &secondvalue;
   *mypointer = 20;

   cout << "firstvalue is " << firstvalue << endl;
   cout << "secondvalue is " << secondvalue << endl;

   return 0;
}

Lai arī programmā nekur tieši netiek noteiktas firstvalue vai secondvalue vērtības beigu beigās abi variabļi tomēr satur vērtības pateicoties mypointer.


C++ argv[] switch

int main(int argc, char *argv[]) {

   char usage[] =
      "\n"
      "  %s  - (c) 2009-2010 Name Surname\n"
      "  http://your.homepage.com\n"
      "\n"
      "  usage: %s  [optional values]\n"
      "\n";

   if(argc <= 1) { // show usage if no parameter is specified
      printf(usage, "1.0.0", argv[0]);

      return 0;
   }

   for(int i=1; i<argc; i++) {
      if(argv[i][0] == '-') { // if value starts with "-" it should be the command
         switch(argv[i][1]) {
            case 'a':
               printf("you selected -a\n");
               printf("a was: %s", argv[i+1]);
               break;

            case 'b':
               printf("you selected -b");
               printf("b was: %s", argv[i+1]);
               break;

            default:
               printf(usage, "1.0.0", argv[0]);
         }
      }
   }

   return 0;
}

Protams visi ienākošie dati ir jāpārbauda vai viņi atbilst prasībām & stuff.


Startēt uTorrent tikai tad, ja ir torrenti ko kačāt/sīdot

Nebija ko darīt un nepatika, ka uTorrent sēž trejā. Izdomāju, ka startēšu uTorrent tikai tad, ja iekš manas torrents mapes (tur, kur tiek glabāti visi mani *.torrent faili) būs kāds  torrents, ko kačāt.

@ECHO OFF
:: This batch file checks if there are any .torrent files
:: in the specified dir & executes uTorrent if it succeeded.

SET UTORRENT=C:\Program Files\uTorrent\uTorrent.exe
SET TORRENTS=C:\Program Files\uTorrent\Torrents

IF EXIST "%TORRENTS%\*.torrent" START "" /min "%UTORRENT%"

Nokopē augstāk esošo tekstu, saglabā kā utorrent.bat. Pievienojam jaunu scheduled task un liekam tam startēties kad  ielogojies vai kad sistēma startējas.


Par to kā es organizēju savu mūziku

Savu mūzikas kolekciju es organizēju visai vienkārši, t.i., vadoties pēc zvaigznīšu vērtējumiem. Klausoties mūziku es to novērtēju no 1 – 5 skalā, lai vēlāk nerastos visādi sarežģījumi, kad kolekcija sāk tiešām augt. Tālāk par pašiem vērtējumiem, kuri man ir radušies lasot dažādus forumus un izzinot savas dziļākās vēlmes :D

1 zvaigzne
Šādu vērtējumu iegūst tās kompozīcijas, kuras ir jāizdzēš vai jāatrod labāka kvalitāte. Respektīvi šāds vērtējums tiek piešķirts dublikātiem, visādiem efektiem (bass tests) un cita šņega, kura šeit iederas. Vēlāk ir ļoti vienkārši izdzēst “vienniekus” no savas mēdīju bibliotēkas, kā tagad tautā kruti teikt.

2 zvaigznes
Šāds vērtējums tiek piešķirts tām dziesmām, kuras ir kāda izpildītāja “kvantitavitātes” (velns, kur grūti uzrakstīt) treki, tjipa dažādi intro, outro & stuff like that. Bieži sastopami albūmos, bet īstas jēgas no tiem nav un ārā arī negribās dzēst, turklāt, mūsdienās apjomīgi “digitālie plašumi” nemaksā nemaz tik daudz.

3 zvaigznes
Nu šī ir tā saucamā “gaļa”. Šīs dziesmas ir potenciālie “četrinieki”. Šīm dziesmām kkas trūkst līdz “četriniekam”, bet ārā dzēst arī negribās, jo šķiet, ka šo dziesmu klausoties tā pēc kāda laiciņa varētu saņemt ”četrinieku” . Principā šīs ir tās “jocīgi-svarīgās” dziesmas, kad pirksti neceļās, lai izdzēstu :)

4 zvaizgnes
Nu šīs ir tās dziesmas, kuras man tiešām patīk klausīties. “Četrinieks” praktiski ir augstākais vērtējums, jo no tiem sastāv mana pleyliste. Visvienkāršāk aizpildāmā kategorija, jo tas jau sen ir zināms, kuras dziesmas ir pelnījušas šo vērtējumu.

5 zvaigznes
Nu “piecniekus” nevar tā īsti aprakstīt, bet paļubom visi zinām, kas tās pa dziesmām! Šīs ir tās dziesmas, kuras patiešām aizkustina. Like really, really get you excited. Tās ir īpašas dziesmas, kuras atgādina tev kādu pārdzīvotu mirkli. Šādas dziesmas generally make you do crazy shit. Un jā, bieži šīs dziesmas mēdz būt nedaudz apkaunojošas tāpēc es tās klausos tikai vienatnē un nekad draugu klātbūtnē, jo draugi rēks tā, ka žokļi atkārsies līdz grīdai :)


Pele atstiepās

No sākuma likās, ka tikai барахлит, bet vēlāk izrādās atstiepās, so.. izštepselēju peli,  “e2fsck -v -y /dev/sda1″ un tagad nāksies jūzot touchpad’u kamēr nopirkšu peli. Tēmēju uz logitech, jo viņi ražo normāla izmēra peles. Ciest nevaru tās sīkās peles.


Līkās rokas, c++ un getenv()

Nesen man uzpeldēja dīvaina problēma, ka iekš c++ nestrādāja getenv(). Vispār – man kods nestrādāja nemaz. Strādāju es ar šādu kodu:

#include <cstdlib>
#include <iostream>

int main(void) {
  char * s = getenv("PATH");

  if (s) {
    printf("%s\n", s);
  } else {
    std::cout << "FAIL";
  }

  return 0;
}

Kurš diemžēl man nekā neatgrieza. I mean vispār neko (pat to “FAIL”). Tad nu es to štelli atmetu. Šodien (26.09.2009) piesēdos un kkā sadomāju nomainīt manu kompilēšanas str (“g++ test.cpp -o test”) uz šādu – “g++ test.cpp -o test2″. Palaidu progu un voulā viss strādā! Vot pizdjec! :|
Vēlāk Datuves lietotājs speccy apgaismoja mani, ka ar to “test” es vislaik palaidu bash skriptu. Vajadzēja “./test” :(


C++ iekš GNU/Linux

Nezināju kā lai sāk kodēt c++ iekš linux. Ja godīgi tad es nemaz i nezināju kā šeit kompilē c++ kodu, a izrādas pavisam easy “g++ blah.cpp -o blah”. Anyway es sāku prasīt gūglei un šī man izmeta cplusplus.com tutoriāli. Nu neko sāku lasīt un tad kkā nejauši atcerējos, ka man tak vesela kaudze ar žurnāliem savilkta kkad tālajā 2008. (ja nemaldos) gadā. Ie-cd’oju dir’ā un izrādās to žurnālu tur ir pat pārāk daudz – veseli 39! Aij, pohuj.. gan jau noderēs, bet pagaidām turpināšu mācīties no cplusplus.com pdf’a :)


DraugiemMusic – Firefox addon (extension)

Netīšām sanāca uztaisīt, ka muzika.draugiem.lv dziesmas ir iespējams nolādēt mūziķa profilā, bet nu tas lai paliek uz katra paša sirdsapziņas :)

Maģiskā podziņa

Maģiskā podziņa atgriež šādu rezultātu:Dziesmu saraksts
Tālākais jau katra paša ziņā vai nu “ffmpeg -i blah.flv -ab 128k blah.mp3″, zamzar.com vai velnsviņzin kas :)


Daļa no tā ko paveicu pagājšnakt neguļot

dir_listing


Uzliku jauno QT un puse no softa atstiepās

Aizvakar, neatceros kāpēc, ieinstalēju QT 4 un tas man saplēsa visu sistēmu. Nonesu. Uzliku QT3.3, joprojām nekas neiet. Eh.. Tāds slinkums meklēt iemeslu kādēļ tas tā. Kad izgulēšos tad var būt..  Šonakt atkal negulēju, kodēju lapu. Nebija fīlings gulēt. Zato kad tagad kkad dienas vidū atplīsīšu tā uz stundām 30mit :D Vispār vajadzētu kkā iespējot abus QT, respektīvi, qt būtu qt3.3 un qt4 būtu qt4 :)


Follow

Get every new post delivered to your Inbox.