<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8402324</id><updated>2009-02-20T23:07:26.049-08:00</updated><title type='text'>Technical Articles</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techispot.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8402324/posts/default'/><link rel='alternate' type='text/html' href='http://techispot.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Selvan</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8402324.post-110071883675260796</id><published>2004-11-17T11:05:00.000-08:00</published><updated>2004-11-17T11:13:56.753-08:00</updated><title type='text'>Some  technical links</title><content type='html'>&lt;span style="color: rgb(255, 153, 102);"&gt;Links:&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C Pointers&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://users.southeast.net/~garyg/ptrs/toc.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C Introduction&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.scit.wlv.ac.uk/~jphb/cbook/html/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Increase C speed&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ontek.com/mikey/current.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.lysator.liu.se/c/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;About C  Collections&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://pitel-lnx.ibk.fnt.hvu.nl/~rbergen/cmain.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C resources for Beginners&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.sct.gu.edu.au/~anthony/tower/NE/C/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C Language complete ( makefile , libs etc )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.pageplus.com/~hsf/libraries/computing/prog/c.shtml&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Some C stuff ( Compilers tools  , FAQ's )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.sandybay.com/pc-web/C.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C Encylopedia&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.eskimo.com/~scs/cclass/cclass.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C Classroom&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cyberdiem.com/vin/learn.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C++&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C++ Material&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.icce.rug.nl/docs/cplusplus&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cerfnet.com/~mpcline/c++-faq-lite/&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://cmwww.unn.ac.uk/~adrian/c++/cpppaper&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.desy.de/user/projects/C++/courses/cc/Tutorial&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C++ tutorial&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.swcp.com/~dodrill/cppdoc/cpplist.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://cs.sdsu.edu:8080/~whitney/courses/fall95/cs596_1/notes/index.h&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.itr.ch/courses/case/BoochReference/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.icce.rug.nl/docs/cplusplus/cplusplus.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Visual C++&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;OLE ( VCPP ) site&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/devonly/community/cbisv_4c.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/oledev/olecom/vc15tn39.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;( Grid )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.periphere.com/lib/grid/grid0.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;(Dialog Box Resize)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://ourworld.compuserve.com/homepages/MRConway/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.visionx.com/mfcpro/mskb.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;(MFC Professionals)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.visionx.com/mfcpro/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MFC Journals&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.vcdj.com/vcdj/default.htm&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.aul.fiu.edu/tech/visualc.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Index Tips&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.al-williams.com/awc/tipindex.shtml&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Dr. Dobb's journal&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ddj.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Complex data Design&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.wrox.com/books/0499/0499.stm&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.wrox.com/&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.wrox.co.uk/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Article&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/kb/articles/q166/4/73.htm.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MFC KB&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/kb/default.asp&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;OA Convertor&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ziplink.net/~dmitry/download.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Gif Animator&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/imagecomposer/gifanimator/gafaq.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MS Journal&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/msj/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;SDK tutorial&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.relisoft.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MFC CODE&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.dsp.com/zafir&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MFC links&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.r2m.com/windev/MFC.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.nwlink.com/~mikeblas/samples/index.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MFC Samples&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.codeguru.com&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;GridControl&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.dundas.com&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;MFC Q&amp;A center&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.inquiry.com/techtips/mfc_pro/&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.codeguru.com/&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VC++ Sample with MFC&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.progsource.com/c_windows.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;FAQ on VC++ , C , Windows&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/visualc/coollink/websites.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Math Functions&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://math.nist.gov/mcsd/Staff/RPozo/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Internet, DHTML, HTML, Java, CGI, Perl&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;What's Internet&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.msn.com/tutorial/default.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Dynamic Html Links&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.all-links.com/dynamic/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;html reference&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.webmonkey.com/nl.cgi/webmonkey/reference/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.javasoft.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.apl.jhu.edu/~hall/java/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.javasoft.com:80/nav/read/Tutorial/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Java download dir&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.javasoft.com/nav/download/index.html#jdk11&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.apl.jhu.edu/~hall/java/#Tutorials&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://website.ora.com/wspro/java/doc/api/API_users_guide.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;JAVA  SDK&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://monarch.mcs.csuhayward.edu/~cmorgan/MMJava/Chapter_02/API.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.eckelobjects.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Download " Thinking in  Javabook " &amp;  C++ collections&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://desktoppublishing.com/java.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java-scripts&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.dannyg.com/java-script/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java-scripts in downloadable file&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.jchelp.com/javahelp/javahelp.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java-scripts  -- Download  Hlp File&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ora.com/catalog/jenut/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Nutshell  ( Book  ) download example&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://rummelplatz.uni-mannheim.de/~skoch/js/tutorial.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java-scripts Tutorials&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.jsworld.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java-scripts World&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.freqgrafx.com/411/index.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;java-scripts  Introduction , Tutorials , FAQ ....&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.hardlink.com/~robyoung/javatour/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;HTML tutorial&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.woodhill.co.uk/html/html.htm&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimerAll.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://members.aol.com/htmlguru/qanda/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;HTML  ---  TIPS&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/fill-out-forms/overvie&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;w.ht&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;m&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;HTML --- TIPS _ FORMS&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.htmloasis.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Online HTML _ CGI&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://superscripts.com/resources/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;CGI resoruces&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.apexsc.com/vb/cgi.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;CGI &amp; vb-scriptS&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cnj.digex.net/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;CGI Stuff&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://lightsphere.com/dev/class/index.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://lightsphere.com/dev/class/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Tutorials online classes&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www1.shore.net/~ikrakow/cgibooks.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;CGI Book Store&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cgibook.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;cgi books&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.halcyon.com/sanford/cgi/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Online Reference&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://hoohoo.ncsa.uiuc.edu/cgi&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;General Materials&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.icce.rug.nl&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;PERL&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.icemall.com/free/free_perl_scripts.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Perl scripts&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ibic.com/Digest/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;PERL Web Desgin&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.zip.com.au/~dwight/webconst.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Guide for Deseigning Web Networking&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;www.networkcomputing.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://techweb.cmp.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Network&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;TCP/IP&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://techref.ezine.com/ptc/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Device Drivers&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.mindspring.com/~tdivine/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Network Drivers Assembly Lang&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://webster.ucr.edu/Page_asm/ArtofAssembly/pdf/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Intro. to CGI/PERL&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.mispress.com/introcgi/book/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Beginer's Guide&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ricb.demon.co.uk/coding.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Prog. Optimization&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.geocities.com/SiliconValley/9498/optimize.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Motif&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cen.com/mw3/code.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Motif Tutorial&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://antares.enst-bretagne.fr/Tutoriaux/motif/motif.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;SOME GOOD DOWNLOADS IN FULL COMPUTER AREA&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.programmersheaven.com/files/file2.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;A TO Z LINKS IN CURRENT COMPUTERS&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.programmersheaven.com/links/link1.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Graphics&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.dcs.ed.ac.uk/~mxr/gfx&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;File Formats , Links , graphics resources , FAQ  etc.,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;*****&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Expert Exchange for FAQ.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.experts-exchange.com/info/howto.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Register and Post a Question or answer it.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.albany.net/~danorton/ddk/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;a lot of  news group ,FAQ's  ,Links etc., Lex &amp; yacc&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.uman.com/roman.shtml&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.windowscentral.com/software/categories/programming/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Programming&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.vb-scripts.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;vb-scripts&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.vbexplorer.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Tutorials , Downloads ...&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.netcomuk.co.uk/~fiume/biggabyte2.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB LINKS&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.xs4all.nl/~treffers/links.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.vbonline.com/vb-mag/default.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Online  Magazine&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.geocities.com/~scvb/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Links&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://web2.airmail.net/gbeene/visual.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB ( A to Z ) + links&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.dcs.napier.ac.uk/~simon/VB30/home.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Tutorial - Download ( GRID control )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://206.171.105.131/vb-mag/9605/begin/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Online Magazine class&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.geocities.com/SiliconValley/Park/3269/links.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Games Programming + Links&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cobb.com/s_ivb/9611/ivb96b3.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Registry&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://home.pi.net/~gtgkup/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Application examples&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.thebestweb.com/vb/tutorial.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB ( A - Z ) + Jobs&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.thebestweb.com/vbfaqs/faq_links.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB  FAQ's + Links&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.thebestweb.com/vbfaqs/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Mailing List ( Beginners , Advance users )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.citilink.com/~jgarrick/vbasic/resources/downloads.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Downloads ( HELP FILE , EXAMPLES etc., )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.qns.com/~robinson/vb/vb1.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Resource Index&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.r2m.com/windev/visual-basic.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Internet Resources&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.future.net/~johnny/vb/vbsites.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Mini  VB  Web&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://thunder.ocis.temple.edu/~shariq/vb/vbkb/vbkb-4.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Advance VB prg.. ( API , DLL etc., )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://login.eunet.no/~lnesheim/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Samples , Download,50+more.. Links , ActiveX&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://w3.one.net/~dreitz/#VBREF&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Sources , Downloads, Tips etc.,(About 50+ download&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Applications  Hlp&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;file , DLL etc., )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.imginfo.com/devonly/tipsandtricks.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB , ACCESS , TIPS &amp; TRICKS&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.vbexplorer.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Great Links to VB&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.iessoft.com/scripts/index.shtml&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB , CGI , Q&amp;A&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.pht.com/pub/vbbbn/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB Sources, Download , OCX ,VBX controls  Activex&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.activex3d.com/FrameSets/Welcome/NFWelcome.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Tutorials&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;WINSOCK&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.stardust.com/wsresource/winsock1/winsock.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.goodnet.com/~esnible/winsock.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.catalyst.com/freebies.html#tcpintro&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;TCP / IP&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.softlab.ntua.gr/unix/unix-socket-faq/unix-socket-faq.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Socket - FAQ&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.catalyst.com/tcpdoc13.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;VB - WINDOWS API&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://sunsite.unc.edu/winsock/winsock-1.1/winsock.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Online Help for  Winsock API.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.sockets.com/sample.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Examples of Winsock Applications&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://kipper.york.ac.uk/~vic/sock-faq/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Socket&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cs.buffalo.edu/~milun/unix.programming.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://burks.bton.ac.uk/burks/pcinfo/progdocs/winsock/winsock.htm#toc&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Good Reference with each function call.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.eng.uc.edu/~jtilley/tutorial.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C , C++ , CGI , TCP/IP , HTML, Java SQL , Assembly&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.iftech.com/oltc/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C , C++ , Java , MFC OnLine Books&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.mcp.com/que/bookshelf/&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://home.earthlink.net/~jlutgen/cirob.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.abyssbooks.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Books&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://internet-plaza.net/streets/book.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Book Street&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.sybex.com/cgi-bin/i_sort2.pl&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Books  Downloadable&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://mcp.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Books Online for limited period&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Programming Languages&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://help-site.com/languages.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;UNIX, Windows&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.utexas.edu/cc/faqs/unix/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;FAQ  useful for beginners&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.polaris.net/ugu/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;For ( UNIX GURU UNIVERSE ) for System Administrator&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.webmonkey.com/nl.cgi/webmonkey/source/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;vi fundas Windows&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.r2m.com/windev/&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;&lt;http://www.r2m.com/windev/&gt;      Windows&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Developer site( About all Windows based product C++ ,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;C , VC++ ( MFC&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;,OLE )  ,VB, win95,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Samples  winsock etc . , )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.geocities.com/SiliconValley/Heights/6121/c.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Windows FAQ&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.savilltech.com/&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;NT FAQ ( Best Site ***** for System  Administrators..)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ntinternals.com/links.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;NT Internals&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.winsite.com/about/index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Windows 3.1 , NT , 95 , utility files ( downloadable )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.utu.fi/~sisasa/oasis/oasis-windows.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Windows Programming (VC++ , MFC , SDK , API's&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Networking , ActiveX ,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Graphics , OLE ,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;COM , Device Drivers ,  Scripts  , Compression , DLL&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;etc., )&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.kudonet.com/~ixfwin/winprog_faqs/wpw_wapi_index.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Windows Prg FAQ software sites&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.leo.org/archiv/archiv_e.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;*http://www.ticc.com/vrl/vrl_archives.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;**http://www.skyinternet.ca/customer/inapp95.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cadvision.com/cdavison/file_sites.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.cie.ut.ee/~gsa/softarch.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;**http://mcp.com/softlib/software.html&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.commerce.com/net2/internet/getstart/archives.html&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;JAVASCIPT website&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;1)wwww.javascriptweenie.com&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;ASP websites&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;1)asp.papiez.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;2)www.livewizards.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;3)www.asppipeline.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;4)www.aspcode.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;5)www.aspfree.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;6)www.asphole.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;7)www.asptoday.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;8)www.asphack.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;9)www.15seconds.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;10)www.aspupload.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;11)www.asp-connections.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;12)powerasp.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;13)www.aspforums.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;14)www.learnasp.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;15)www.devguru.com&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;16)www.aspwire.com&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;I guess this should help software learning ppl a lot.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;.asp&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;OA Convertor&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ziplink.net/~dmitry/download.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;Gif Animator&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.microsoft.com/imagecomposer/gifanimator/gafaq.htm&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(255, 153, 102);"&gt;http://www.ddsl.net&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8402324-110071883675260796?l=techispot.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techispot.blogspot.com/feeds/110071883675260796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8402324&amp;postID=110071883675260796' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8402324/posts/default/110071883675260796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8402324/posts/default/110071883675260796'/><link rel='alternate' type='text/html' href='http://techispot.blogspot.com/2004/11/some-technical-links.html' title='Some  technical links'/><author><name>Selvan</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11351778587940347158'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8402324.post-109570464268877402</id><published>2004-09-20T11:18:00.000-07:00</published><updated>2004-09-20T11:34:33.496-07:00</updated><title type='text'>Programming in C by Ritchie</title><content type='html'>  &lt;h1 style="text-align: center;" align="center"&gt;Programming in C: &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;A Tutorial &lt;/h1&gt;   &lt;h2 style="text-align: center;" align="center"&gt;&lt;a href="http://www.lysator.liu.se/c/bwk/index.html"&gt;Brian W. Kernighan&lt;/a&gt;&lt;br /&gt;Bell Laboratories, Murray Hill, N. J. &lt;/h2&gt;    &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;    &lt;p class="MsoNormal"&gt;&lt;b&gt;Disclaimer:&lt;/b&gt; This ``tutorial'' is presented as a historical document, not as a tutorial. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Although it has lost little of its didactic value, it describes a language that C compilers today do no longer understand: the C of 1974, four years before &lt;a href="http://www.lysator.liu.se/c/bwk/index.html"&gt;Kernighan&lt;/a&gt; and &lt;a href="http://www.cs.bell-labs.com/who/dmr/index.html"&gt;Ritchie&lt;/a&gt; published the first edition of ``The C Programming Language''. &lt;/p&gt;    &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;    &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Table of Contents: &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;1.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#introduction"&gt;Introduction&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;2.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#simple-c"&gt;A Simple C Program&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;3.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#working-c"&gt;A Working C Program; Variables; Types and Type Declarations&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;4.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#constant"&gt;Constants&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;5.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#simple-io"&gt;Simple I/O&lt;/a&gt; -- getchar, putchar, printf &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;6.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#if"&gt;If&lt;/a&gt;; &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#relational"&gt;relational operators&lt;/a&gt;; &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#compound"&gt;compound statements&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;7.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#while"&gt;While Statement&lt;/a&gt;; &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#assignment-within"&gt;Assignment within an Expression&lt;/a&gt;; &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#null-statement"&gt;Null Statement&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;8.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#arithmetic"&gt;Arithmetic&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;9.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#else"&gt;Else Clause&lt;/a&gt;; &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#conditional"&gt;Conditional Expressions&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;10.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#increment"&gt;Increment and Decrement Operators&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;11.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#array"&gt;Arrays&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;12.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#character-array"&gt;Character Arrays; Strings&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;13.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#for"&gt;For Statement&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;14.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#functions"&gt;Functions; Comments&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;15.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#variables"&gt;Local and External Variables&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;16.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#pointers"&gt;Pointers&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;17.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#argument"&gt;Function Arguments&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;18.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#multiple-level"&gt;Multiple Levels of Pointers; Program Arguments&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;19.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#switch"&gt;The Switch Statement; Break; Continue&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;20.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#structure"&gt;Structures&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;21.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#initialization"&gt;Initialization&lt;/a&gt; of Variables &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;22.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#scope"&gt;Scope Rules&lt;/a&gt;: Who Knows About What &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;23.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#define"&gt;#define&lt;/a&gt;, &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#include"&gt;#include&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;24.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#bit"&gt;Bit Operators&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;25.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#assignment"&gt;Assignment Operators&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;26.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#floating"&gt;Floating Point&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;27.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;Horrors! &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#goto"&gt;goto's and labels&lt;/a&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;28.&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;  &lt;/span&gt;&lt;!--[endif]--&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#acknowledgement"&gt;Acknowledgements&lt;/a&gt; &lt;/p&gt;    &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;    &lt;h2&gt;1. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Introduction. &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;C is a computer language available on the GCOS and UNIX operating systems at Murray Hill and (in preliminary form) on OS/360 at Holmdel. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;C lets you write your programs clearly and simply it has decent control flow facilities so your code can be read straight down the page, without labels or GOTO's; it lets you write code that is compact without being too cryptic; it encourages modularity and good program organization; and it provides good data-structuring facilities. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;This memorandum is a tutorial to make learning C as painless as possible. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The first part concentrates on the central features of C; the second part discusses those parts of the language which are useful (usually for getting more efficient and smaller code) but which are not necessary for the new user. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This is &lt;em&gt;not&lt;/em&gt; a reference manual. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Details and special cases will be skipped ruthlessly, and no attempt will be made to cover every language feature. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The order of presentation is hopefully pedagogical instead of logical. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Users who would like the full story should consult the "C Reference Manual" by D. M. Ritchie &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#lit-1"&gt;[1]&lt;/a&gt;, which should be read for details anyway. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Runtime support is described in &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#lit-2"&gt;[2]&lt;/a&gt; and &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#lit-3"&gt;[3]&lt;/a&gt;; you will have to read one of these to learn how to compile and run a C program. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;We will assume that you are familiar with the mysteries of creating files, text editing, and the like in the operating system you run on, and that you have programmed in some language before. &lt;/p&gt;   &lt;h2&gt;2. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;A Simple C Program &lt;/h2&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf("hello, world");&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;A C program consists of one or more functions, which are similar to the functions and subroutines of a Fortran program or the procedures of PL/I, and perhaps some external data definitions. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt; is such a function, and in fact all C programs must have a &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Execution of the program begins at the first statement of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt; will usually invoke other functions to perform its job, some coming from the same program, and others from libraries. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;One method of communicating data between functions is by arguments. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The parentheses following the function name surround the argument list; here &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;main&lt;/span&gt;&lt;/code&gt; is a function of no arguments, indicated by ( ). &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The {} enclose the statements of the function. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Individual statements end with a semicolon but are otherwise free-format. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;code&gt;&lt;span style="font-size: 10pt;"&gt;printf&lt;/span&gt;&lt;/code&gt; is a library function which will format and print output on the terminal (unless some other destination is specified). &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;In this case it prints &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;hello, world&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;A function is invoked by naming it, followed by a list of arguments in parentheses. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;There is no CALL statement as in Fortran or PL/I. &lt;/p&gt;   &lt;h2&gt;3. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;A Working C Program; Variables; Types and Type Declarations &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;Here's a bigger program that adds three integers and prints their sum. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;            &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;int a, b, c, sum;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;a = 1;&lt;span style=""&gt;  &lt;/span&gt;b = 2;&lt;span style=""&gt;  &lt;/span&gt;c = 3;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;sum = a + b + c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf("sum is %d", sum);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Arithmetic and the assignment statements are much the same as in Fortran (except for the semicolons) or PL/I. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The format of C programs is quite free. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;We can put several statements on a line if we want, or we can split a statement among several lines if it seems desirable. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The split may be between any of the operators or variables, but &lt;em&gt;not&lt;/em&gt; in the middle of a name or operator. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;As a matter of style, spaces, tabs, and newlines should be used freely to enhance readability. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;C has four fundamental types of variables: &lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;int &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;integer      (PDP-11: 16 bits; H6070: 36 bits; IBM360: 32 bits) &lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;char &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;one      byte character (PDP-11, IBM360: 8 bits; H6070: 9 bits) &lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;float &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;single-precision      floating point &lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;double &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;double-precision      floating point &lt;/li&gt; &lt;/ul&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There are also arrays and structures of these basic types, pointers to them and functions that return them, all of which we will meet shortly. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;All variables in a C program must be declared, although this can sometimes be done implicitly by context. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Declarations must precede executable statements. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The declaration &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int a, b, c, sum;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;declares &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;c&lt;/span&gt;&lt;/code&gt;, and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;sum&lt;/span&gt;&lt;/code&gt; to be integers. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Variable names have one to eight characters, chosen from A-Z, a-z, 0-9, and _, and start with a non-digit. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Stylistically, it's much better to use only a single case and give functions and external variables names that are unique in the first six characters. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;(Function and external variable names are used by various assemblers, some of which are limited in the size and case of identifiers they can handle.) Furthermore, keywords and library functions may only be recognized in one case. &lt;/p&gt;   &lt;h2&gt;4. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Constants &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;We have already seen decimal integer constants in the &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#onetwothree"&gt;previous example&lt;/a&gt;-- 1, 2, and 3. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Since C is often used for system programming and bit-manipulation, octal numbers are an important part of the language. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;In C, any number that begins with 0 (zero!) is an octal integer (and hence can't have any 8's or 9's in it). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;0777&lt;/span&gt;&lt;/code&gt; is an octal constant, with decimal value 511. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;A ``character'' is one byte (an inherently machine-dependent concept). &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Most often this is expressed as a character constant, which is one character enclosed in single quotes. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;However, it may be any quantity that fits in a byte, as in flags below: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char quest, newline, flags;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;quest = '?';&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;newline = '\n';&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;flags = 077;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The sequence `\n' is C notation for ``newline character'', which, when printed, skips the terminal to the beginning of the next line. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Notice that `\n' represents only a single character. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;There are several other ``escapes'' like `\n' for representing hard-to-get or invisible characters, such as `\t' for tab, `\b' for backspace, `\0' for end of file, and `\\' for the backslash itself. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;code&gt;&lt;span style="font-size: 10pt;"&gt;float&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;double&lt;/span&gt;&lt;/code&gt; constants are discussed in &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#floating"&gt;section 26&lt;/a&gt;. &lt;/p&gt;   &lt;h2&gt;5. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Simple I/O -- getchar, putchar, printf &lt;/h2&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;c = getchar( );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;putchar(c);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;code&gt;&lt;span style="font-size: 10pt;"&gt;getchar&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;putchar&lt;/span&gt;&lt;/code&gt; are the basic I/O library functions in C. &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;getchar&lt;/span&gt;&lt;/code&gt; fetches one character from the standard input (usually the terminal) each time it is called, and returns that character as the value of the function. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;When it reaches the end of whatever file it is reading, thereafter it returns the character represented by `\0' (ascii NUL, which has value zero). &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We will see how to use this very shortly. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;code&gt;&lt;span style="font-size: 10pt;"&gt;putchar&lt;/span&gt;&lt;/code&gt; puts one character out on the standard output (usually the terminal) each time it is called. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;So the program above reads one character and writes it back out. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;By itself, this isn't very interesting, but observe that if we put a loop around this, and add a test for end of file, we have a complete program for copying one file to another. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;&lt;code&gt;&lt;span style="font-size: 10pt;"&gt;printf&lt;/span&gt;&lt;/code&gt; is a more complicated function for producing formatted output. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We will talk about only the simplest use of it. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Basically, &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;printf&lt;/span&gt;&lt;/code&gt; uses its first argument as formatting information, and any successive arguments as variables to be output. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;printf ("hello, world\n");&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;is the simplest use. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The string ``hello, world\n'' is printed out. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;No formatting information, no variables, so the string is dumped out verbatim. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The newline is necessary to put this out on a line by itself. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(The construction &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;"hello, world\n"&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;is really an array of chars. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#character-array"&gt;More about this shortly&lt;/a&gt;.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;More complicated, if &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;sum&lt;/span&gt;&lt;/code&gt; is 6, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;printf ("sum is %d\n", sum);&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;prints &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;sum is 6&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Within the first argument of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;printf&lt;/span&gt;&lt;/code&gt;, the characters ``%d'' signify that the next argument in the argument list is to be printed as a base 10 number. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Other useful formatting commands are ``%c'' to print out a single character, ``%s'' to print out an entire string, and ``%o'' to print a number as octal instead of decimal (no leading zero). &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;n = 511;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;printf ("What is the value of %d in octal?", n);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;printf ("%s! %d decimal is %o octal\n", "Right", n, n);&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;prints &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;What is the value of 511 in octal?&lt;span style=""&gt;  &lt;/span&gt;Right! 511&lt;span style=""&gt;  &lt;/span&gt;decimal&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;is 777 octal&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Notice that there is no newline at the end of the first output line. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Successive calls to &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;printf&lt;/span&gt;&lt;/code&gt; (and/or &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;putchar&lt;/span&gt;&lt;/code&gt;, for that matter) simply put out characters. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;No newlines are printed unless you ask for them. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Similarly, on input, characters are read one at a time as you ask for them. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Each line is generally terminated by a newline (\n), but there is otherwise no concept of record. &lt;/p&gt;   &lt;h2&gt;6. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;If; relational operators; compound statements &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;The basic conditional-testing statement in C is the if statement: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;c = getchar( );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if( c == '?' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf("why did you type a question mark?\n");&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The simplest form of if is &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if (&lt;i&gt;expression&lt;/i&gt;) &lt;i&gt;statement&lt;/i&gt;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The condition to be tested is any expression enclosed in parentheses. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;It is followed by a statement. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The expression is evaluated, and if its value is non-zero, the statement is executed. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;There's an optional &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#else"&gt;else clause&lt;/a&gt;, to be described soon. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The character sequence `==' is one of the relational operators in C; here is the complete set: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;==&lt;span style=""&gt;      &lt;/span&gt;&lt;i&gt;equal to (&lt;/i&gt;.EQ.&lt;i&gt; to Fortraners)&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;!=&lt;span style=""&gt;      &lt;/span&gt;&lt;i&gt;not equal to&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;greater than&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;less than&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&gt;=&lt;span style=""&gt;      &lt;/span&gt;&lt;i&gt;greater than or equal to&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;=&lt;span style=""&gt;      &lt;/span&gt;&lt;i&gt;less than or equal to&lt;/i&gt;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The value of ``expression &lt;i&gt;relation&lt;/i&gt; expression'' is 1 if the relation is true, and 0 if false. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Don't forget that the equality test is `=='; a single `=' causes an assignment, not a test, and invariably leads to disaster. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Tests can be combined with the operators `&amp;&amp;amp;' (AND), `||' (OR), and `!' (NOT). &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, we can test whether a character is blank or tab or newline with &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if( c==' ' || c=='\t' || c=='\n' ) ...&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;C guarantees that `&amp;&amp;amp;' and `||' are evaluated left to right -- we shall soon see cases where this matters. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;One of the nice things about C is that the statement part of an if can be made arbitrarily complicated by enclosing a set of statements in {}. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;As a simple example, suppose we want to ensure that &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;a&lt;/span&gt;&lt;/code&gt; is bigger than &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;b&lt;/span&gt;&lt;/code&gt;, as part of a sort routine. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The interchange of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;a&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;b&lt;/span&gt;&lt;/code&gt; takes three statements in C, grouped together by {}: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if (a &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;t = a;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;a = b;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;b = t;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;As a general rule in C, anywhere you can use a simple statement, you can use any compound statement, which is just a number of simple or compound ones enclosed in {}. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;There is no semicolon after the } of a compound statement, but there &lt;em&gt;is&lt;/em&gt; a semicolon after the last non-compound statement inside the {}. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The ability to replace single statements by complex ones at will is one feature that makes C much more pleasant to use than Fortran. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Logic (like the exchange in the previous example) which would require several GOTO's and labels in Fortran can and should be done in C without any, using compound statements. &lt;/p&gt;   &lt;h2&gt;7. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;While Statement; Assignment within an Expression; Null Statement &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;The basic looping mechanism in C is the while statement. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Here's a program that copies its input to its output a character at a time. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Remember that `\0' marks the end of file. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (c=getchar( )) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;putchar(c);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The while statement is a loop, whose general form is &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;while (&lt;i&gt;expression&lt;/i&gt;) &lt;i&gt;statement&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Its meaning is &lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;(a) &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;evaluate the expression&lt;br /&gt;(b) &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;if its value is true (i.e., not zero) do the statement, and go back to (a) &lt;/p&gt;   &lt;p class="MsoNormal"&gt;Because the expression is tested before the statement is executed, the statement part can be executed zero times, which is often desirable. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;As in the if statement, the expression and the statement can both be arbitrarily complicated, although we haven't seen that yet. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Our example gets the character, assigns it to c, and then tests if it's a `\0''. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;If it is not a `\0', the statement part of the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;while&lt;/span&gt;&lt;/code&gt; is executed, printing the character. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;while&lt;/span&gt;&lt;/code&gt; then repeats. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;When the input character is finally a `\0', the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;while&lt;/span&gt;&lt;/code&gt; terminates, and so does &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Notice that we used an assignment statement &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;c = getchar( )&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;within an expression. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This is a handy notational shortcut which often produces clearer code. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(In fact it is often the only way to write the code cleanly. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;As an exercise, rewrite the file-copy without using an assignment inside an expression.) &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;It works because an assignment statement has a value, just as any other expression does. Its value is the value of the right hand side. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This also implies that we can use multiple assignments like &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = y = z = 0;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Evaluation goes from right to left. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;By the way, the extra parentheses in the assignment statement within the conditional were really necessary: if we had said &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;c = getchar( ) != '\0'&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;c&lt;/span&gt;&lt;/code&gt; would be set to 0 or 1 depending on whether the character fetched was an end of file or not. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This is because in the absence of parentheses the assignment operator `=' is evaluated after the relational operator `!='. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;When in doubt, or even if not, parenthesize. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Since &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;putchar(c)&lt;/span&gt;&lt;/code&gt; returns &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;c&lt;/span&gt;&lt;/code&gt; as its function value, we could also copy the input to the output by nesting the calls to &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;getchar&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;putchar&lt;/span&gt;&lt;/code&gt;: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt; &lt;span style=""&gt;          &lt;/span&gt;while( putchar(getchar( )) != '\0' ) ;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;What statement is being repeated? None, or technically, the null statement, because all the work is really done within the test part of the while. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This version is slightly different from the previous one, because the final `\0' is copied to the output before we decide to stop. &lt;/p&gt;   &lt;h2&gt;8. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Arithmetic &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;The arithmetic operators are the usual `+', `-', `*', and `/' (truncating integer division if the operands are both int), and the remainder or mod operator `%': &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = a%b;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;sets x to the remainder after &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; is divided by &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; (i.e., a mod b). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The results are machine dependent unless &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; are both positive. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;In arithmetic, &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;char&lt;/span&gt;&lt;/code&gt; variables can usually be treated like &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;int&lt;/span&gt;&lt;/code&gt; variables. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Arithmetic on characters is quite legal, and often makes sense: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;c = c + 'A' - 'a';&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;converts a single lower case ascii character stored in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;c&lt;/span&gt;&lt;/code&gt; to upper case, making use of the fact that corresponding ascii letters are a fixed distance apart. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The rule governing this arithmetic is that all chars are converted to &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;int&lt;/span&gt;&lt;/code&gt; before the arithmetic is done. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Beware that conversion may involve sign-extension if the leftmost bit of a character is 1, the resulting integer might be negative. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(This doesn't happen with genuine characters on any current machine.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;So to convert a file into lower case: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (c=getchar( )) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( 'A'&lt;=c &amp;&amp;amp; c&lt;='Z' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;putchar(c+'a'-'A');&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;else&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;putchar(c);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Characters have different sizes on different machines. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Further, this code won't work on an IBM machine, because the letters in the ebcdic alphabet are not contiguous. &lt;/p&gt;   &lt;h2&gt;9. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Else Clause; Conditional Expressions &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;We just used an &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;else&lt;/span&gt;&lt;/code&gt; after an &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;if&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The most general form of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;if&lt;/span&gt;&lt;/code&gt; is &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if (&lt;i&gt;expression&lt;/i&gt;) &lt;i&gt;statement1&lt;/i&gt; else &lt;i&gt;statement2&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;else&lt;/span&gt;&lt;/code&gt; part is optional, but often useful. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The canonical example sets &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; to the minimum of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt;: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if (a &lt;&gt; &lt;pre&gt; &lt;span style=""&gt;              &lt;/span&gt;x = a;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;x = b;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Observe that there's a semicolon after &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x=a&lt;/span&gt;&lt;/code&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;C provides an alternate form of conditional which is often more concise. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;It is called the ``conditional expression'' because it is a conditional which actually has a value and can be used anywhere an expression can. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The value of &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;a&lt;b&gt;   &lt;p class="MsoNormal"&gt;is &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; if &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; is less than &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt;; it is &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; otherwise. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;In general, the form &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;expr1&lt;/i&gt; ? &lt;i&gt;expr2&lt;/i&gt; : &lt;i&gt;expr3&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;means ``evaluate &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;expr1&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;If it is not zero, the value of the whole thing is &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;expr2&lt;/span&gt;&lt;/code&gt;; otherwise the value is &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;expr3&lt;/span&gt;&lt;/code&gt;.'' &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;To set &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; to the minimum of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;a&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;b&lt;/span&gt;&lt;/code&gt;, then: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = (a&lt;b&gt;   &lt;p class="MsoNormal"&gt;The parentheses aren't necessary because `?:' is evaluated before `=', but safety first. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Going a step further, we could write the loop in the lower-case program as &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;while( (c=getchar( )) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;putchar( ('A'&lt;=c &amp;&amp;amp; c&lt;='Z') ? c-'A'+'a' : c );&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;If's and else's can be used to construct logic that branches one of several ways and then rejoins, a common programming structure, in this way: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if(...)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;{...}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else if(...)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;{...}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else if(...)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;{...}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;{...}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The conditions are tested in order, and exactly one block is executed; either the first one whose if is satisfied, or the one for the last &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;else&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;When this block is finished, the next statement executed is the one after the last else. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;If no action is to be taken for the ``default'' case, omit the last &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;else&lt;/span&gt;&lt;/code&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;For example, to count letters, digits and others in a file, we could write &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int let, dig, other, c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;let = dig = other = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;while( (c=getchar( )) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                  &lt;/span&gt;if( ('A'&lt;=c &amp;&amp;amp; c&lt;='Z') || ('a'&lt;=c &amp;&amp;amp;&lt;span style=""&gt;  &lt;/span&gt;c&lt;='z') )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                     &lt;/span&gt;&lt;span style=""&gt;   &lt;/span&gt;++let;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                  &lt;/span&gt;else if( '0'&lt;=c &amp;&amp;amp; c&lt;='9' ) ++dig;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                  &lt;/span&gt;else&lt;span style=""&gt;  &lt;/span&gt;++other;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;printf("%d letters, %d digits, %d others\n", let, dig, other);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The `++' operator means ``increment by 1''; we will get to it in the next section. &lt;/p&gt;   &lt;h2&gt;10. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Increment and Decrement Operators &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;In addition to the usual `-', C also has two other interesting unary operators, `++' (increment) and `--' (decrement). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Suppose we want to count the lines in a file. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int c,n;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;span style=""&gt;        &lt;/span&gt;n = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (c=getchar( )) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( c == '\n' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;++n;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf("%d lines\n", n);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;++n&lt;/span&gt;&lt;/code&gt; is equivalent to &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;n=n+1&lt;/span&gt;&lt;/code&gt; but clearer, particularly when &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;n&lt;/span&gt;&lt;/code&gt; is a complicated expression. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;`++' and `--' can be applied only to int's and char's (and &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#pointers"&gt;pointers&lt;/a&gt; which we haven't got to yet). &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The unusual feature of `++' and `--' is that they can be used either before or after a variable. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The value of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;++k&lt;/span&gt;&lt;/code&gt; is the value of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;k&lt;/span&gt;&lt;/code&gt; &lt;em&gt;after&lt;/em&gt; it has been incremented. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The value of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;k++ &lt;/span&gt;&lt;/code&gt;is &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;k&lt;/span&gt;&lt;/code&gt; &lt;em&gt;before&lt;/em&gt; it is incremented. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Suppose &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;k&lt;/span&gt;&lt;/code&gt; is 5. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Then &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = ++k;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;increments &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;k&lt;/span&gt;&lt;/code&gt; to 6 and then sets &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; to the resulting value, i.e., to 6. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;But &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = k++;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;first sets &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; to to 5, and &lt;em&gt;then&lt;/em&gt; increments &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;k&lt;/span&gt;&lt;/code&gt; to 6. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The incrementing effect of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;++k&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;k++&lt;/span&gt;&lt;/code&gt; is the same, but their values are respectively 5 and 6. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;We shall soon see examples where both of these uses are important. &lt;/p&gt;   &lt;h2&gt;11. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Arrays &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;In C, as in Fortran or PL/I, it is possible to make arrays whose elements are basic types. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus we can make an array of 10 integers with the declaration &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int x[10];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The square brackets mean subscripting; parentheses are used only for function references. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Array indexes begin at zero, so the elements of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; are &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x[0], x[1], x[2], ..., x[9]&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;If an array has &lt;i&gt;n&lt;/i&gt; elements, the largest subscript is &lt;i&gt;n-1&lt;/i&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Multiple-dimension arrays are provided, though not much used above two dimensions. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The declaration and use look like &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int name[10] [20];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;n = name[i+j] [1] + name[k] [2];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Subscripts can be arbitrary integer expressions. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Multi-dimension arrays are stored by row (opposite to Fortran), so the rightmost subscript varies fastest; name has 10 rows and 20 columns. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Here is a program which reads a line, stores it in a buffer, and prints its length (excluding the newline at the end). &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int n, c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char line[100];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;n = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (c=getchar( )) != '\n' ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( n &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;line[n] = c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;n++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf("length = %d\n", n);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;As a more complicated problem, suppose we want to print the count for each line in the input, still storing the first 100 characters of each line. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Try it as an exercise before looking at the solution: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int n, c; char line[100];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;n = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (c=getchar( )) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( c == '\n' ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;printf("%d0, n);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;n = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;else {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;if( n &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;n++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;h2&gt;12. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Character Arrays; Strings &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;Text is usually kept as an array of characters, as we did with &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;line[ ]&lt;/span&gt;&lt;/code&gt; in the example above. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;By convention in C, the last character in a character array should be a `\0' because most programs that manipulate character arrays expect it. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;printf&lt;/span&gt;&lt;/code&gt; uses the `\0' to detect the end of a character array when printing it out with a `%s'. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;We can copy a character array &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;s&lt;/span&gt;&lt;/code&gt; into another &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;t&lt;/span&gt;&lt;/code&gt; like this: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;i = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (t[i]=s[i]) != '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;i++;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Most of the time we have to put in our own `\0' at the end of a string; if we want to print the line with &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;printf&lt;/span&gt;&lt;/code&gt;, it's necessary. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This code prints the character count before the line: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int n;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char line[100];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;n = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (line[n++]=getchar( )) != '\n' );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;line[n] = '\0';&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf("%d:\t%s", n, line);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Here we increment &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;n&lt;/span&gt;&lt;/code&gt; in the subscript itself, but only after the previous value has been used. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The character is read, placed in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;line[n]&lt;/span&gt;&lt;/code&gt;, and only then &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;n&lt;/span&gt;&lt;/code&gt; is incremented. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There is one place and one place only where C puts in the `\0' at the end of a character array for you, and that is in the construction &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;"stuff between double quotes"&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The compiler puts a `\0' at the end automatically. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Text enclosed in double quotes is called a &lt;em&gt;string&lt;/em&gt;; its properties are precisely those of an (initialized) array of characters. &lt;/p&gt;   &lt;h2&gt;13. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;For Statement &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;The &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;for&lt;/span&gt;&lt;/code&gt; statement is a somewhat generalized &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;while&lt;/span&gt;&lt;/code&gt; that lets us put the initialization and increment parts of a loop into a single statement along with the test. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The general form of the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;for&lt;/span&gt;&lt;/code&gt; is &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;for( &lt;i&gt;initialization&lt;/i&gt;; &lt;i&gt;expression&lt;/i&gt;; &lt;i&gt;increment&lt;/i&gt; )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;i&gt;statement&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The meaning is exactly &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;i&gt;initialization&lt;/i&gt;;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;while( &lt;i&gt;expression&lt;/i&gt; ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;i&gt;statement&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;&lt;i&gt;increment&lt;/i&gt;;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Thus, the following code does the same array copy as &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#copy-example"&gt;the example in the previous section&lt;/a&gt;: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;for( i=0; (t[i]=s[i]) != '\0'; i++ );&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This slightly more ornate example adds up the elements of an array: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;sum = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;for( i=0; i&lt;n;&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;sum = sum + array[i];&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;In the for statement, the initialization can be left out if you want, but the semicolon has to be there. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The increment is also optional. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;It is &lt;em&gt;not&lt;/em&gt; followed by a semicolon. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The second clause, the test, works the same way as in the &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while&lt;/span&gt;&lt;/code&gt;: if the expression is true (not zero) do another loop, otherwise get on with the next statement. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;As with the &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while&lt;/span&gt;&lt;/code&gt;, the for loop may be done zero times. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;If the expression is left out, it is taken to be always true, so &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;for( ; ; ) ...&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;and &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;while( 1 ) ...&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;are both infinite loops. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;You might ask why we use a &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;for&lt;/span&gt;&lt;/code&gt; since it's so much like a &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;(You might also ask why we use a &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while&lt;/span&gt;&lt;/code&gt; because...) &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt; &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;for&lt;/span&gt;&lt;/code&gt; is usually preferable because it keeps the code where it's used and sometimes eliminates the need for compound statements, as in this code that zeros a two-dimensional array: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;for( i=0; i&lt;n;&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( j=0; j&lt;m;&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;array[i][j] = 0;&lt;/pre&gt;   &lt;h2&gt;14. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Functions; Comments &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;Suppose we want, as part of a larger program, to count the occurrences of the ascii characters in some input text. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Let us also map illegal characters (those with value&gt;127 or &lt;0)&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Since this is presumably an isolated part of the program, good practice dictates making it a separate function. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Here is one way: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int hist[129];&lt;span style=""&gt;      &lt;/span&gt;/*&lt;span style=""&gt;  &lt;/span&gt;128 legal chars + 1 illegal group*/&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;count(hist, 128);&lt;span style=""&gt;   &lt;/span&gt;/* count the letters into hist */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;printf( ... );&lt;span style=""&gt;      &lt;/span&gt;/* comments look like this; use them */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;span style=""&gt;        &lt;/span&gt;/* anywhere blanks, tabs or newlines could appear */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;count(buf, size)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int size, buf[ ]; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int i, c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( i=0; i&lt;=size; i++ )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;buf[i]&lt;span style=""&gt;  &lt;/span&gt;=&lt;span style=""&gt;  &lt;/span&gt;0;&lt;span style=""&gt;                     &lt;/span&gt;/*&lt;span style=""&gt;  &lt;/span&gt;set buf to zero */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while(&lt;span style=""&gt;  &lt;/span&gt;(c=getchar(&lt;span style=""&gt;  &lt;/span&gt;)) != '\0' ) {&lt;span style=""&gt;       &lt;/span&gt;/* read til eof */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( c &gt; size || c &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;c = size;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;            &lt;/span&gt;/* fix illegal input */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;buf[c]++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;We have already seen many examples of calling a function, so let us concentrate on how to define one. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Since &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;count&lt;/span&gt;&lt;/code&gt; has two arguments, we need to declare them, as shown, giving their types, and in the case of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;buf&lt;/span&gt;&lt;/code&gt;, the fact that it is an array. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The declarations of arguments go between the argument list and the opening `{'. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;There is no need to specify the size of the array &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;buf&lt;/span&gt;&lt;/code&gt;, for it is defined outside of count. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The return statement simply says to go back to the calling routine. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;In fact, we could have omitted it, since a return is implied at the end of a function. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;What if we wanted &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;count&lt;/span&gt;&lt;/code&gt; to return a value, say the number of characters read? &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The return statement allows for this too: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int i, c, nchar;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;nchar = 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( (c=getchar( )) != '\0' ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( c &gt; size || c &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;c = size;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;buf[c]++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;nchar++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return(nchar);&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Any expression can appear within the parentheses. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Here is a function to compute the minimum of two integers: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;min(a, b)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int a, b; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return( a &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;To copy a character array, we could write the function &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;strcopy(s1, s2)&lt;span style=""&gt;         &lt;/span&gt;/* copies s1 to s2 */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char s1[ ], s2[ ]; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int i;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( i = 0; (s2[i] = s1[i]) != '\0'; i++ );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;As is often the case, all the work is done by the assignment statement embedded in the test part of the for. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Again, the declarations of the arguments s1 and s2 omit the sizes, because they don't matter to &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;strcopy&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(In the &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#pointers"&gt;section on pointers&lt;/a&gt;, we will see a more efficient way to do a string copy.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There is a subtlety in function usage which can trap the unsuspecting Fortran programmer. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Simple variables (not arrays) are passed in C by ``call by value'', which means that the called function is given a copy of its arguments, and doesn't know their addresses. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This makes it impossible to change the value of one of the actual input arguments. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There are two ways out of this dilemma. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;One is to make special arrangements to pass to the function the address of a variable instead of its value. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The other is to make the variable a global or external variable, which is known to each function by its name. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We will discuss both possibilities in the next few sections. &lt;/p&gt;   &lt;h2&gt;15. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Local and External Variables &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;If we say &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;f( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int x;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;g( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int x;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;each &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; is &lt;em&gt;local&lt;/em&gt; to its own routine -- the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;f&lt;/span&gt;&lt;/code&gt; is unrelated to the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;g&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(Local variables are also called ``automatic''.) &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Furthermore each local variable in a routine appears only when the function is called, and &lt;em&gt;disappears&lt;/em&gt; when the function is exited. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Local variables have no memory from one call to the next and must be explicitly initialized upon each entry. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(There is a &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;static&lt;/span&gt;&lt;/code&gt; storage class for making local variables with memory; we won't discuss it.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;As opposed to local variables, external variables are defined external to all functions, and are (potentially) available to all functions. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;External storage always remains in existence. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;To make variables external we have to define them external to all functions, and, wherever we want to use them, make a declaration. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;extern int nchar, hist[ ];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;count( );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;count( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;extern int nchar, hist[ ];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int i, c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;hist[129];&lt;span style=""&gt;      &lt;/span&gt;/* space for histogram */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;nchar;&lt;span style=""&gt;          &lt;/span&gt;/* character count */&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Roughly speaking, any function that wishes to access an external variable must contain an extern declaration for it. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The declaration is the same as others, except for the added keyword &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;extern&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Furthermore, there must somewhere be a definition of the external variables external to all functions. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;External variables can be initialized; they are set to zero if not explicitly initialized. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;In its simplest form, initialization is done by putting the value (which must be a constant) after the definition: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;nchar&lt;span style=""&gt;   &lt;/span&gt;0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;flag&lt;span style=""&gt;    &lt;/span&gt;'f';&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;i&gt;etc.&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This is discussed further in a &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#initialization"&gt;later section&lt;/a&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;This ends our discussion of what might be called the central core of C. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;You now have enough to write quite substantial C programs, and it would probably be a good idea if you paused long enough to do so. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The rest of this tutorial will describe some more ornate constructions, useful but not essential. &lt;/p&gt;   &lt;h2&gt;16. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Pointers &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;A pointer in C is the address of something. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;It is a rare case indeed when we care what the specific address itself is, but pointers are a quite common way to get at the contents of something. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The unary operator `&amp;' is used to produce the address of an object, if it has one. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int a, b;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;b = &amp;a;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;puts the address of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; into &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;We can't do much with it except print it or pass it to some other routine, because we haven't given &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; the right kind of declaration. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;But if we declare that &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; is indeed a pointer to an integer, we're in good shape: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int a, *b, c;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;b = &amp;a;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;c = *b;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; contains the address of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt; and `c = *b' means to use the value in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;b&lt;/span&gt;&lt;/code&gt; as an address, i.e., as a pointer. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The effect is that we get back the contents of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a&lt;/span&gt;&lt;/code&gt;, albeit rather indirectly. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(It's always the case that `*&amp;x' is the same as &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; if &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; has an address.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The most frequent use of pointers in C is for walking efficiently along arrays. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;In fact, in the implementation of an array, the array name represents the address of the zeroth element of the array, so you can't use it on the left side of an expression. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;(You can't change the address of something by assigning to it.) &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;If we say &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char *y;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char x[100];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;y&lt;/span&gt;&lt;/code&gt; is of type pointer to character (although it doesn't yet point anywhere). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;We can make &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;y&lt;/span&gt;&lt;/code&gt; point to an element of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; by either of &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;y = &amp;x[0];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;y = x;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Since &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; is the address of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x[0]&lt;/span&gt;&lt;/code&gt; this is legal and consistent. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Now `*y' gives x[0]. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;More importantly, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;*(y+1)&lt;span style=""&gt;  &lt;/span&gt;gives x[1]&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;*(y+i)&lt;span style=""&gt;  &lt;/span&gt;gives x[i]&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;and the sequence &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;y = &amp;x[0];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;y++;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;leaves &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;y&lt;/span&gt;&lt;/code&gt; pointing at x[1]. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Let's use pointers in a function length that computes how long a character array is. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Remember that by convention all character arrays are terminated with a `\0'. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;(And if they aren't, this program will blow up inevitably.) &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The old way: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;length(s)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char s[ ]; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int n;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( n=0; s[n] != '\0'; )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;n++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return(n);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Rewriting with pointers gives &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;length(s)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char *s; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int n;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( n=0; *s != '\0'; s++ )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                 &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;n++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return(n);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;You can now see why we have to say what kind of thing &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;s&lt;/span&gt;&lt;/code&gt; points to -- if we're to increment it with &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;s++&lt;/span&gt;&lt;/code&gt; we have to increment it by the right amount. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The pointer version is more efficient (this is almost always true) but even more compact is &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( n=0; *s++ != '\0'; n++ );&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The `*s' returns a character; the `++' increments the pointer so we'll get the next character next time around. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;As you can see, as we make things more efficient, we also make them less clear. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;But `*s++' is an idiom so common that you have to know it. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Going a step further, here's our function strcopy that copies a character array s to another t. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;strcopy(s,t)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char *s, *t; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while(*t++ = *s++);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;We have omitted the test against `\0', because `\0' is identically zero; you will often see the code this way. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(You &lt;em&gt;must&lt;/em&gt; have a space after the `=': see &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#assignment"&gt;section 25&lt;/a&gt;.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;For arguments to a function, and there only, the declarations &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char s[ ];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char *s;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;are equivalent -- a pointer to a type, or an array of unspecified size of that type, are the same thing. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;If this all seems mysterious, copy these forms until they become second nature. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;You don't often need anything more complicated. &lt;/p&gt;   &lt;h2&gt;17. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Function Arguments &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;Look back at the &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#strcopy"&gt;function strcopy in the previous section&lt;/a&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;We passed it two string names as arguments, then proceeded to clobber both of them by incrementation. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;So how come we don't lose the original strings in the function that called strcopy? &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;As we said before, C is a ``call by value'' language: when you make a function call like f(x), the &lt;em&gt;value&lt;/em&gt; of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; is passed, not its address. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;So there's no way to &lt;em&gt;alter&lt;/em&gt; &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; from inside &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;f&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;If &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; is an array (char x[10]) this isn't a problem, because &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; &lt;em&gt;is&lt;/em&gt; an address anyway, and you're not trying to change it, just what it addresses. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This is why &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;strcopy&lt;/span&gt;&lt;/code&gt; works as it does. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;And it's convenient not to have to worry about making temporary copies of the input arguments. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;But what if &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; is a scalar and you do want to change it? &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;In that case, you have to pass the &lt;em&gt;address&lt;/em&gt; of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; to &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;f&lt;/span&gt;&lt;/code&gt;, and then use it as a pointer. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus for example, to interchange two integers, we must write &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;flip(x, y)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;      &lt;/span&gt;int *x, *y; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;int temp;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;temp = *x;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;*x = *y;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;*y = temp;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;and to call &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;flip&lt;/span&gt;&lt;/code&gt;, we have to pass the addresses of the variables: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;flip (&amp;a, &amp;amp;b);&lt;/pre&gt;   &lt;h2&gt;18. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Multiple Levels of Pointers; Program Arguments &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;When a C program is called, the arguments on the command line are made available to the main program as an argument count &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;argc&lt;/span&gt;&lt;/code&gt; and an array of character strings &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;argv&lt;/span&gt;&lt;/code&gt; containing the arguments. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Manipulating these arguments is one of the most common uses of multiple levels of pointers (``pointer to pointer to ...''). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;By convention, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;argc&lt;/span&gt;&lt;/code&gt; is greater than zero; the first s argument (in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;argv[0]&lt;/span&gt;&lt;/code&gt;) is the command name itself. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Here is a program that simply echoes its arguments. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main(argc, argv)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int argc;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char **argv; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int i;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( i=1; i &lt;&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Step by step: &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt; is called with two arguments, the argument count and the array of arguments. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;argv&lt;/span&gt;&lt;/code&gt; is a pointer to an array, whose individual elements are pointers to arrays of characters. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The zeroth argument is the name of the command itself, so we start to print with the first argument, until we've printed them all. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Each argv[i] is a character array, so we use a `%s' in the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;printf&lt;/span&gt;&lt;/code&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;You will sometimes see the declaration of &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;argv&lt;/span&gt;&lt;/code&gt; written as &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char *argv[ ];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;which is equivalent. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;But we can't use &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;char argv[ ][ ]&lt;/span&gt;&lt;/code&gt;, because both dimensions are variable and there would be no way to figure out how big the array is. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Here's a bigger example using &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;argc&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;argv&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;A common convention in C programs is that if the first argument is `-', it indicates a flag of some sort. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, suppose we want a program to be callable as &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;prog -abc arg1 arg2 ...&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;where the `-' argument is optional; if it is present, it may be followed by any combination of a, b, and c. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main(argc, argv)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int argc;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char **argv; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;aflag = bflag = cflag &lt;span style=""&gt; &lt;/span&gt;= 0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;if( argc &gt; 1 &amp;&amp;amp; argv[1][0] == '-' ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;for( i=1; (c=argv[1][i]) != '\0'; i++ )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;if( c=='a' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                                       &lt;/span&gt;aflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;else if( c=='b' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                                       &lt;/span&gt;bflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;else if( c=='c' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                                       &lt;/span&gt;cflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;else&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                                       &lt;/span&gt;printf("%c?\n", c);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;span style=""&gt;              &lt;/span&gt;--argc;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;++argv;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There are several things worth noticing about this code. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;First, there is a real need for the left-to-right evaluation that &amp;&amp;amp; provides; we don't want to look at &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;argv[1]&lt;/span&gt;&lt;/code&gt; unless we know it's there. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Second, the statements &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;--argc;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;++argv;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;let us march along the argument list by one position, so we can skip over the flag argument as if it had never existed; the rest of the program is independent of whether or not there was a flag argument. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This only works because &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;argv&lt;/span&gt;&lt;/code&gt; is a pointer which can be incremented. &lt;/p&gt;   &lt;h2&gt;19. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The Switch Statement; Break; Continue &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;The switch statement can be used to replace the multi-way test we used in the last example. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;When the tests are like this: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if( c == 'a' ) ...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else if( c == 'b' ) ...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else if( c == 'c' ) ...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;else ...&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;testing a value against a series of constants, the switch statement is often clearer and usually gives better code. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Use it like this: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;switch( c ) {&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'a':&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;aflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;break;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'b':&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;bflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;break;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'c':&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;cflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;break;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;default:&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;              &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;printf("%c?\n", c);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;break;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The case statements label the various actions we want; &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;default&lt;/span&gt;&lt;/code&gt; gets done if none of the other cases are satisfied. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;(A &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;default&lt;/span&gt;&lt;/code&gt; is optional; if it isn't there, and none of the cases match, you just fall out the bottom.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The break statement in this example is new. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;It is there because the cases are just labels, and after you do one of them, you fall through to the next unless you take some explicit action to escape. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This is a mixed blessing. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;On the positive side, you can have multiple cases on a single statement; we might want to allow both upper and lower &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'a':&lt;span style=""&gt;  &lt;/span&gt;case 'A':&lt;span style=""&gt;    &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'b':&lt;span style=""&gt;  &lt;/span&gt;case 'B':&lt;span style=""&gt;    &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;i&gt;etc.&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;But what if we just want to get out after doing case `a' ? We could get out of a &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;case&lt;/span&gt;&lt;/code&gt; of the &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;switch&lt;/span&gt;&lt;/code&gt; with a label and a &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;goto&lt;/span&gt;&lt;/code&gt;, but this is really ugly. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The break statement lets us exit without either &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;goto&lt;/span&gt;&lt;/code&gt; or label. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;switch( c ) {&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'a':&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;aflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;break;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;case 'b':&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;span style=""&gt;         &lt;/span&gt;bflag++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;break;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;/* the break statements get us here directly */&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The break statement also works in for and while statements; it causes an immediate exit from the loop. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The continue statement works &lt;em&gt;only&lt;/em&gt; inside &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;for&lt;/span&gt;&lt;/code&gt;'s and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while&lt;/span&gt;&lt;/code&gt;'s; it causes the next iteration of the loop to be started. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This means it goes to the increment part of the &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;for&lt;/span&gt;&lt;/code&gt; and the test part of the &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We could have used a continue in our example to get on with the next iteration of the &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;for&lt;/span&gt;&lt;/code&gt;, but it seems clearer to use &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;break&lt;/span&gt;&lt;/code&gt; instead. &lt;/p&gt;   &lt;h2&gt;20. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Structures &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;The main use of structures is to lump together collections of disparate variable types, so they can conveniently be treated as a unit. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, if we were writing a compiler or assembler, we might need for each identifier information like its name (a character array), its source line number (an integer), some type information (a character, perhaps), and probably a usage count (another integer). &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;We can make a structure out of this quite easily. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We first tell C what the structure will look like, that is, what kinds of things it contains; after that we can actually reserve storage for it, either in the same statement or separately. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The simplest thing is to define it and allocate storage all at once: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;} sym;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;This defines sym to be a structure with the specified shape; &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;id&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;line&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;type&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;usage&lt;/span&gt;&lt;/code&gt; are members of the structure. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The way we refer to any particular member of the structure is &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;structure-name . member&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;as in &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;sym.type = 077;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;if( sym.usage == 0 ) ...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( sym.id[j++] ) ...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;i&gt;etc.&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Although the names of structure members never stand alone, they still have to be unique; there can't be another id or usage in some other structure. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;So far we haven't gained much. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The advantages of structures start to come when we have arrays of structures, or when we want to pass complicated data layouts between functions. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Suppose we wanted to make a symbol table for up to 100 identifiers. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We could extend our definitions like &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[100][10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line[100];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type[100];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage[100];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;but a structure lets us rearrange this spread-out information so all the data about a single identifer is collected into one lump: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;} sym[100];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This makes sym an array of structures; each array element has the specified shape. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Now we can refer to members as &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;sym[i].usage++; /* increment usage of i-th identifier */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( j=0; sym[i].id[j++] != '\0'; ) ...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                  &lt;/span&gt;&lt;i&gt;etc.&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Thus to print a list of all identifiers that haven't been used, together with their line number, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;            &lt;/span&gt;for( i=0; i&lt;nsym;&gt; &lt;pre&gt;&lt;span style=""&gt;                    &lt;/span&gt;if( sym[i].usage == 0 )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                            &lt;/span&gt;printf("%d\t%s\n", sym[i].line, sym[i].id);&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Suppose we now want to write a function lookup(name) which will tell us if name already exists in &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;sym&lt;/span&gt;&lt;/code&gt;, by giving its index, or that it doesn't, by returning a -1. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;We can't pass a structure to a function directly; we have to either define it externally, or pass a pointer to it. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Let's try the first way first. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;nsym&lt;span style=""&gt;    &lt;/span&gt;0;&lt;span style=""&gt;      &lt;/span&gt;/* current length of symbol table */&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;} sym[100];&lt;span style=""&gt;             &lt;/span&gt;/* symbol table */&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;if( (index = lookup(newname)) &gt;= 0 )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;sym[index].usage++;&lt;span style=""&gt;              &lt;/span&gt;/* already there ... */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;else&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;install(newname, newline, newtype);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;lookup(s)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char *s; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int i;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;extern struct {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                   &lt;/span&gt;&lt;span style=""&gt;    &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;} sym[ ];&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( i=0; i&lt;nsym;&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( compar(s, sym[i].id) &gt; 0 )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;return(i);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return(-1);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;compar(s1,s2)&lt;span style=""&gt;           &lt;/span&gt;/*&lt;span style=""&gt;  &lt;/span&gt;return 1 if s1==s2, 0 otherwise */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char *s1, *s2; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( *s1++ == *s2 )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;if( *s2++ == '\0' )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;return(1);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return(0);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The declaration of the structure in lookup isn't needed if the external definition precedes its use in the same source file, as we shall see in a moment. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Now what if we want to use pointers? &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct&lt;span style=""&gt;  &lt;/span&gt;symtag {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char &lt;span style=""&gt;   &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;} sym[100], *psym;&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;psym = &amp;sym[0]; /* or p = sym; */&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This makes &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;psym&lt;/span&gt;&lt;/code&gt; a pointer to our kind of structure (the symbol table), then initializes it to point to the first element of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;sym&lt;/span&gt;&lt;/code&gt;. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Notice that we added something after the word struct: a ``tag'' called symtag. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;This puts a name on our structure definition so we can refer to it later without repeating the definition. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;It's not necessary but useful. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;In fact we could have said &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct&lt;span style=""&gt;  &lt;/span&gt;symtag {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;... structure definition&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;};&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;which wouldn't have assigned any storage at all, and then said &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct&lt;span style=""&gt;  &lt;/span&gt;symtag&lt;span style=""&gt;  &lt;/span&gt;sym[100];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct&lt;span style=""&gt;  &lt;/span&gt;symtag&lt;span style=""&gt;  &lt;/span&gt;*psym;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;which would define the array and the pointer. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This could be condensed further, to &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct&lt;span style=""&gt;  &lt;/span&gt;symtag&lt;span style=""&gt;  &lt;/span&gt;sym[100], *psym;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The way we actually refer to an member of a structure by a pointer is like this: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;ptr -&gt; structure-member&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The symbol `-&gt;' means we're pointing at a member of a structure; `-&gt;' is only used in that context. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;ptr&lt;/span&gt;&lt;/code&gt; is a pointer to the (base of) a structure that contains the structure member. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The expression ptr-&gt;structure-member refers to the indicated member of the pointed-to structure. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus we have constructions like: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;psym-&gt;type = 1;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;psym-&gt;id[0] = 'a';&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;and so on. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;For more complicated pointer expressions, it's wise to use parentheses to make it clear who goes with what. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct { int x, *y; } *p;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;p-&gt;x++&lt;span style=""&gt;  &lt;/span&gt;increments x&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;++p-&gt;x&lt;span style=""&gt;  &lt;/span&gt;so does this!&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;(++p)-&gt;x&lt;span style=""&gt;        &lt;/span&gt;increments p before getting x&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;*p-&gt;y++ uses y as a pointer, then increments it&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;*(p-&gt;y)++&lt;span style=""&gt;       &lt;/span&gt;so does this&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;*(p++)-&gt;y&lt;span style=""&gt;       &lt;/span&gt;uses y as a pointer, then increments p&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The way to remember these is that -&gt;, . (dot), ( ) and [ ] bind very tightly. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;An expression involving one of these is treated as a unit. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;p-&gt;x&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;a[i]&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;y.x&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;f(b)&lt;/span&gt;&lt;/code&gt; are names exactly as &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;abc&lt;/span&gt;&lt;/code&gt; is. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;If &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;p&lt;/span&gt;&lt;/code&gt; is a pointer to a structure, any arithmetic on &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;p&lt;/span&gt;&lt;/code&gt; takes into account the actual size of the structure. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;For instance, &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;p++&lt;/span&gt;&lt;/code&gt; increments &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;p&lt;/span&gt;&lt;/code&gt; by the correct amount to get the next element of the array of structures. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;But don't assume that the size of a structure is the sum of the sizes of its members -- because of alignments of different sized objects, there may be ``holes'' in a structure. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Enough theory. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Here is the lookup example, this time with pointers. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct symtag {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;id[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;line;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;type;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;usage;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;} sym[100];&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;main( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;struct symtag *lookup( );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;struct symtag *psym;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;if( (psym = lookup(newname)) )&lt;span style=""&gt;  &lt;/span&gt;/* non-zero pointer */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;psym -&gt; usage++;&lt;span style=""&gt;                 &lt;/span&gt;/* means already&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;there */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;else&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;install(newname, newline, newtype);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct symtag *lookup(s)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;char *s; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;struct symtag *p;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( p=sym; p &lt; &amp;sym[nsym]; p++ )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;         &lt;/span&gt;&lt;span style=""&gt;              &lt;/span&gt;if( compar(s, p-&gt;id) &gt; 0)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                               &lt;/span&gt;return(p);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;return(0);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The function compar doesn't change: `p-&gt;id' refers to a string. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;In &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;main&lt;/span&gt;&lt;/code&gt; we test the pointer returned by &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;lookup&lt;/span&gt;&lt;/code&gt; against zero, relying on the fact that a pointer is by definition never zero when it really points at something. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The other pointer manipulations are trivial. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The only complexity is the set of lines like &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct symtag *lookup( );&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This brings us to an area that we will treat only hurriedly; the question of function types. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;So far, all of our functions have returned integers (or characters, which are much the same). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;What do we do when the function returns something else, like a pointer to a structure? &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The rule is that any function that doesn't return an &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;int&lt;/span&gt;&lt;/code&gt; has to say explicitly what it does return. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The type information goes before the function name (which can make the name hard to see). &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Examples: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char f(a)&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;int a; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int *g( ) { ... }&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;struct symtag *lookup(s) char *s; { ... }&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;The function &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;f&lt;/span&gt;&lt;/code&gt; returns a character, &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;g&lt;/span&gt;&lt;/code&gt; returns a pointer to an integer, and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;lookup&lt;/span&gt;&lt;/code&gt; returns a pointer to a structure that looks like &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;symtag&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;And if we're going to use one of these functions, we have to make a declaration where we use it, as we did in &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;main&lt;/span&gt;&lt;/code&gt; above. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Notice the parallelism between the declarations &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;struct symtag *lookup( );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;struct symtag *psym;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;In effect, this says that &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;lookup( )&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;psym&lt;/span&gt;&lt;/code&gt; are both used the same way - as a pointer to a structure -- even though one is a variable and the other is a function. &lt;/p&gt;   &lt;h2&gt;21. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Initialization of Variables &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;An external variable may be initialized at compile time by following its name with an initializing value when it is defined. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The initializing value has to be something whose value is known at compile time, like a constant. &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;x&lt;span style=""&gt;       &lt;/span&gt;0;&lt;span style=""&gt;      &lt;/span&gt;/* "0" could be any constant */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;a&lt;span style=""&gt;       &lt;/span&gt;'a';&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;flag&lt;span style=""&gt;    &lt;/span&gt;0177;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;*p&lt;span style=""&gt;      &lt;/span&gt;&amp;y[1];&lt;span style=""&gt;  &lt;/span&gt;/* p now points to y[1] */&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;An external array can be initialized by following its name with a list of initializations enclosed in braces: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;x[4]&lt;span style=""&gt;    &lt;/span&gt;{0,1,2,3};&lt;span style=""&gt;  &lt;/span&gt;/* makes x[i] = i */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;y[ ]&lt;span style=""&gt;    &lt;/span&gt;{0,1,2,3};&lt;span style=""&gt;  &lt;/span&gt;/* makes y big enough for 4 values */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char&lt;span style=""&gt;    &lt;/span&gt;*msg&lt;span style=""&gt;    &lt;/span&gt;"syntax error\n";&lt;span style=""&gt;   &lt;/span&gt;/* braces unnecessary here */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;char *keyword[ ]{&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;"if",&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;"else",&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;"for",&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;"while",&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;"break",&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;"continue",&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;             &lt;/span&gt;0&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;};&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This last one is very useful -- it makes keyword an array of pointers to character strings, with a zero at the end so we can identify the last element easily. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;A simple lookup routine could scan this until it either finds a match or encounters a zero keyword pointer: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;lookup(str)&lt;span style=""&gt;             &lt;/span&gt;/* search for str in keyword[ ] */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;      &lt;/span&gt;char *str; {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;int i,j,r;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;for( i=0; keyword[i] != 0; i++) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                   &lt;/span&gt;for( j=0; (r=keyword[i][j]) == str[j] &amp;&amp;amp; r != '\0'; j++ );&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                   &lt;/span&gt;if( r == str[j] )&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                           &lt;/span&gt;return(i);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;}&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;           &lt;/span&gt;return(-1);&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;   &lt;/span&gt;}&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Sorry -- neither local variables nor structures can be initialized. &lt;/p&gt;   &lt;h2&gt;22. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Scope Rules: Who Knows About What &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;A complete C program need not be compiled all at once; the source text of the program may be kept in several files, and previously compiled routines may be loaded from libraries. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;How do we arrange that data gets passed from one routine to another? &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;We have already seen how to use function arguments and values, so let us talk about external data. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Warning: the words declaration and definition are used precisely in this section; don't treat them as the same thing. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;A major shortcut exists for making extern declarations. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;If the definition of a variable appears &lt;em&gt;before&lt;/em&gt; its use in some function, no extern declaration is needed within the function. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus, if a file contains &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;f1( ) { ... }&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int foo;&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;f2( ) { ... foo = 1; ... }&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;f3( ) { ... if ( foo ) ... }&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;no declaration of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;foo&lt;/span&gt;&lt;/code&gt; is needed in either &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;f2&lt;/span&gt;&lt;/code&gt; or or &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;f3&lt;/span&gt;&lt;/code&gt;, because the external definition of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;foo&lt;/span&gt;&lt;/code&gt; appears before them. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;But if &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;f1&lt;/span&gt;&lt;/code&gt; wants to use &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;foo&lt;/span&gt;&lt;/code&gt;, it has to contain the declaration &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;f1( ) {&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;extern int foo;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;}&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This is true also of any function that exists on another file; if it wants &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;foo&lt;/span&gt;&lt;/code&gt; it has to use an extern declaration for it. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(If somewhere there is an extern declaration for something, there must also eventually be an external definition of it, or you'll get an ``undefined symbol'' message.) &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There are some hidden pitfalls in external declarations and definitions if you use multiple source files. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;To avoid them, first, define and initialize each external variable only once in the entire set of files: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;int &lt;span style=""&gt;    &lt;/span&gt;foo&lt;span style=""&gt;     &lt;/span&gt;0;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;You can get away with multiple external definitions on UNIX, but not on GCOS, so don't ask for trouble. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Multiple initializations are illegal everywhere. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Second, at the beginning of any file that contains functions needing a variable whose definition is in some other file, put in an extern declaration, outside of any function: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;extern&lt;span style=""&gt;  &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;foo;&lt;/pre&gt; &lt;pre&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;f1( ) { ... }&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;i&gt;etc.&lt;/i&gt;&lt;/pre&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#include"&gt;#include compiler control line&lt;/a&gt;, to be discussed shortly, lets you make a single copy of the external declarations for a program and then stick them into each of the source files making up the program. &lt;/p&gt;   &lt;h2&gt;23. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;#define, #include &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;C provides a very limited macro facility. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;You can say &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;#define name&lt;span style=""&gt;            &lt;/span&gt;something&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;and thereafter anywhere ``name'' appears as a token, ``something'' will be substituted. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This is particularly useful in parametering the sizes of arrays: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;#define ARRAYSIZE&lt;span style=""&gt;       &lt;/span&gt;100&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int&lt;span style=""&gt;     &lt;/span&gt;arr[ARRAYSIZE];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;                &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;while( i++ &lt;&gt;   &lt;p class="MsoNormal"&gt;(now we can alter the entire program by changing only the define) or in setting up mysterious constants: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;#define SET&lt;span style=""&gt;             &lt;/span&gt;01&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;#define INTERRUPT&lt;span style=""&gt;       &lt;/span&gt;02&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;/* interrupt bit */&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;#define ENABLED 04&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;        &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;if( x &amp; (SET | INTERRUPT | ENABLED) ) ...&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Now we have meaningful words instead of mysterious constants. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(The mysterious operators `&amp;' (AND) and `|' (OR) will be covered in the &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#bit"&gt;next section&lt;/a&gt;.) &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;It's an excellent practice to write programs without any literal constants except in #define statements. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;There are several warnings about #define. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;First, there's no semicolon at the end of a #define; all the text from the name to the end of the line (except for comments) is taken to be the ``something''. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;When it's put into the text, blanks are placed around it. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Good style typically makes the name in the #define upper case; this makes parameters more visible. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Definitions affect things only after they occur, and only within the file in which they occur. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Defines can't be nested. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Last, if there is a #define in a file, then the first character of the file &lt;em&gt;must&lt;/em&gt; be a `#', to signal the preprocessor that definitions exist. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;The other control word known to C is #include. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;To include one file in your source at compilation time, say &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;#include "filename"&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;This is useful for putting a lot of heavily used data definitions and #define statements at the beginning of a file to be compiled. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;As with #define, the first line of a file containing a #include has to begin with a `#'. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;And #include can't be nested -- an included file can't contain another #include. &lt;/p&gt;   &lt;h2&gt;24. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Bit Operators &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;C has several operators for logical bit-operations. For example, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = x &amp; 0177;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;forms the bit-wise AND of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; and 0177, effectively retaining only the last seven bits of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Other operators are &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;|&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;inclusive OR&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;^&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;(circumflex) exclusive OR&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;     &lt;/span&gt;~&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;(tilde) 1's complement&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;!&lt;span style=""&gt;       &lt;/span&gt;&lt;i&gt;logical NOT&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&lt;&lt;&lt;span style=""&gt;      &lt;/span&gt;&lt;i&gt;left shift (as in x&lt;&lt;2)&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;&gt;&gt;&lt;span style=""&gt;      &lt;/span&gt;&lt;i&gt;right shift&lt;span style=""&gt;     &lt;/span&gt;(arithmetic on PDP-11;&lt;span style=""&gt;  &lt;/span&gt;logical on H6070,&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/pre&gt; &lt;pre&gt;&lt;i&gt;&lt;span style=""&gt;  &lt;/span&gt;IBM360)&lt;/i&gt;&lt;/pre&gt;   &lt;h2&gt;25. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Assignment Operators&lt;/h2&gt;   &lt;p class="MsoNormal"&gt;An unusual feature of C is that the normal binary operators like `+', `-', etc. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;can be combined with the assignment operator `=' to form new assignment operators. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x =- 10;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;uses the assignment operator `=-' to decrement &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; by 10, and &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x =&amp; 0177&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;forms the AND of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; and 0177. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This convention is a useful notational shortcut, particularly if &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; is a complicated expression. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The classic example is summing an array: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;for( sum=i=0; i&lt;n;&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;sum =+ array[i];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;But the spaces around the operator are critical! &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;For &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = -10;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;sets x to -10, while &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x =- 10;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;subtracts 10 from x. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;When no space is present, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x=-10;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;also decreases x by 10. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;This is quite contrary to the experience of most programmers. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;In particular, watch out for things like &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;     &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;c=*s++;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;y=&amp;x[0];&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;both of which are almost certainly not what you wanted. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Newer versions of various compilers are courteous enough to warn you about the ambiguity. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Because all other operators in an expression are evaluated before the assignment operator, the order of evaluation should be watched carefully: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x = x&lt;&lt;y&gt;   &lt;p class="MsoNormal"&gt;means ``shift x left y places, then OR with z, and store in x.'' But &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x =&lt;&lt;&gt;   &lt;p class="MsoNormal"&gt;means ``shift x left by y|z places'', which is rather different. &lt;/p&gt;   &lt;h2&gt;26. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Floating Point &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;We've skipped over floating point so far, and the treatment here will be hasty. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;C has single and double precision numbers (where the precision depends on the machine at hand). &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;For example, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;double sum;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;float avg, y[10];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;sum = 0.0;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;for( i=0; i&lt;n;&gt; &lt;pre&gt;&lt;span style=""&gt;                       &lt;/span&gt;sum =+ y[i];&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;avg = sum/n;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;forms the sum and average of the array y. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;All floating arithmetic is done in double precision. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Mixed mode arithmetic is legal; if an arithmetic operator in an expression has both operands &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;int&lt;/span&gt;&lt;/code&gt; or &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;char&lt;/span&gt;&lt;/code&gt;, the arithmetic done is integer, but if one operand is &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;int&lt;/span&gt;&lt;/code&gt; or &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;char&lt;/span&gt;&lt;/code&gt; and the other is &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;float&lt;/span&gt;&lt;/code&gt; or &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;double&lt;/span&gt;&lt;/code&gt;, both operands are converted to &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;double&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus if &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;i&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;j&lt;/span&gt;&lt;/code&gt; are &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;int&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;x&lt;/span&gt;&lt;/code&gt; is &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;float&lt;/span&gt;&lt;/code&gt;, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt;      &lt;/span&gt;(x+i)/j&lt;span style=""&gt;         &lt;/span&gt;&lt;i&gt;converts &lt;/i&gt;i&lt;i&gt; and &lt;/i&gt;j&lt;i&gt; to &lt;/i&gt;float&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;       &lt;/span&gt;x + i/j&lt;span style=""&gt;         &lt;/span&gt;&lt;i&gt;does &lt;/i&gt;i/j&lt;i&gt; integer, then converts&lt;/i&gt;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Type conversion may be made by assignment; for instance, &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;int m, n;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;float x, y;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;m = x;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;y = n;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;converts &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;x&lt;/span&gt;&lt;/code&gt; to integer (truncating toward zero), and &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;n&lt;/span&gt;&lt;/code&gt; to floating point. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;Floating constants are just like those in Fortran or PL/I, except that the exponent letter is `e' instead of `E'. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Thus: &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;pi = 3.14159;&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;large = 1.23456789e10;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;&lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;printf&lt;/span&gt;&lt;/code&gt; will format floating point numbers: ``%w.df'' in the format string will print the corresponding variable in a field w digits wide, with d decimal places. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;An e instead of an f will produce exponential notation. &lt;/p&gt;   &lt;h2&gt;27. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Horrors! goto's and labels &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;C has a goto statement and labels, so you can branch about the way you used to. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;But most of the time goto's aren't needed. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;(How many have we used up to this point?) &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;The code can almost always be more clearly expressed by for/while, if/else, and compound statements. &lt;/p&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;One use of goto's with some legitimacy is in a program which contains a long loop, where a &lt;code&gt;&lt;span style="font-size: 10pt;"&gt;while(1)&lt;/span&gt;&lt;/code&gt; would be too extended. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Then you might write &lt;/p&gt;   &lt;pre&gt;&lt;span style=""&gt;          &lt;/span&gt;mainloop:&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;...&lt;/pre&gt; &lt;pre&gt;&lt;span style=""&gt;               &lt;/span&gt;goto mainloop;&lt;/pre&gt;   &lt;p class="MsoNormal"&gt;Another use is to implement a &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;break&lt;/span&gt;&lt;/code&gt; out of more than one level of &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;for&lt;/span&gt;&lt;/code&gt; or &lt;code&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt;while&lt;/span&gt;&lt;/code&gt;. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;goto's can only branch to labels within the same function. &lt;/p&gt;   &lt;h2&gt;28. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;Acknowledgements &lt;/h2&gt;   &lt;p class="MsoNormal"&gt;I am indebted to a veritable host of readers who made valuable criticisms on several drafts of this tutorial. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;They ranged in experience from complete beginners through several implementors of C compilers to the C language designer himself. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Needless to say, this is a wide enough spectrum of opinion that no one is satisfied (including me); comments and suggestions are still welcome, so that some future version might be improved. &lt;/p&gt;    &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;    &lt;h2&gt;References&lt;/h2&gt;   &lt;p style="margin: 0in 0in 0.0001pt;"&gt;C is an extension of B, which was designed by D. M. Ritchie and K. L. Thompson &lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#lit-4"&gt;[4]&lt;/a&gt;. The C language design and UNIX implementation are the work of D. M. Ritchie. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The GCOS version was begun by A. Snyder and B. A. Barres, and completed by S. C. Johnson and M. E. Lesk. &lt;tt&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/tt&gt;The IBM version is primarily due to T. G. Peterson, with the assistance of M. E. Lesk. &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#source-1"&gt;[1]&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;D. M. Ritchie, C Reference Manual. &lt;tt&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Arial Unicode MS&amp;quot;;"&gt; &lt;/span&gt;&lt;/tt&gt;Bell Labs, Jan. 1974. &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#source-2"&gt;[2]&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;M. E. Lesk &amp; B. A. Barres, The GCOS C Library. Bell Labs, Jan. 1974. &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#source-3"&gt;[3]&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;D. M. Ritchie &amp; K. Thompson, UNIX Programmer's Manual. 5th Edition, Bell Labs, 1974. &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://www.lysator.liu.se/c/bwk-tutor.html#source-4"&gt;[4]&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;S. C. Johnson &amp; B. W. Kernighan, The Programming Language B. Computer Science Technical Report 8, Bell Labs, 1972. &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;!--[if !supportEmptyParas]--&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8402324-109570464268877402?l=techispot.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techispot.blogspot.com/feeds/109570464268877402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8402324&amp;postID=109570464268877402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8402324/posts/default/109570464268877402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8402324/posts/default/109570464268877402'/><link rel='alternate' type='text/html' href='http://techispot.blogspot.com/2004/09/programming-in-c-by-ritchie.html' title='Programming in C by Ritchie'/><author><name>Selvan</name><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='11351778587940347158'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>