home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / C.TUTOR.1.SFX / lesson2 < prev    next >
Encoding:
Text File  |  1991-03-07  |  12.1 KB  |  541 lines

  1.  
  2. ├ ╠ANGUAGE ╘UTORIAL
  3. -------------------
  4. ╠ESSON 2 OF 11
  5.  
  6.  
  7. ╬OTE: SUBSTITUTIONS FOR SPECIAL C
  8. LANGUAGE CHARACTERS:
  9.  
  10. LEFT CURLY BRACKET:   █
  11. RIGHT CURLY BRACKET:  ▌
  12. BACK SLASH:           \
  13. TILDE:                »
  14. VERTICAL BAR:         ▀
  15. UNDERSCORE:           ñ
  16.  
  17.  
  18.  
  19. ╙TRINGS 'N' THINGS -
  20.  
  21. ╫HEN WE DECLARE:
  22.  
  23. CHAR X; 
  24.  
  25. ╫E TELL THE C COMPILER THAT X IS A 
  26. CHARACTER VARIABLE (SO WE MAY DEFINE 
  27. X='Z'; FOR EXAMPLE).  
  28.  
  29. ┬UT WHAT IF WE WISH TO ASSIGN TO X 
  30. THE STRING: 'HELLO' ?  ╔N ORDER TO 
  31. IDENTIFY A STRING (AS OPPOSED TO A 
  32. SINGLE CHARACTER) WE WRITE: 
  33.  
  34. X="HELLO";  
  35.  
  36. ╒SING THE DOUBLE QUOTE AND WE TELL 
  37. PRINTF() TO PRINT X USING A STRING 
  38. FORMAT, %S: 
  39.  
  40. MAIN() 
  41. CHAR X;     /* DECLARE 
  42.                CHAR X; AS USUAL */
  43. X="HELLO";  /* USE DOUBLE 
  44.                QUOTES TO DEFINE X */
  45.  
  46. PRINTF("STRING X IS %S.",X);   
  47. /* USE %S TO PRINTF A STRING */
  48.  
  49. /* REMEMBER THIS IS A COMMENT IGNORED 
  50.    BY THE COMPILER */
  51.  
  52. ╘HE ABOVE PROGRAM (WHEN COMPILED AND 
  53. RUN) PRINTS: 
  54.  
  55. STRING X IS HELLO.
  56.  
  57. ╔T HAS THE SAME FORMAT AS THE 
  58. DECLARATION OF A SINGLE CHARACTER 
  59. VARIABLE!  (LESSON 6 WILL PROVIDE 
  60. MORE DETAIL). ╘HIS DECLARATION OF A 
  61. STRING X MAY NOT BE ACCEPTABLE TO 
  62. YOUR PARTICULAR C-COMPILER.
  63.  
  64. ─OUBLE QUOTES AND STRINGS, SINGLE 
  65. QUOTES AND CHARACTERS -
  66.  
  67. ├ONSIDER THE FOLLOWING:
  68.  
  69. MAIN() 
  70. CHAR X,Y;   /* X, Y ARE BOTH CHAR */
  71. X="A";      /* X IS IN DOUBLE 
  72.                QUOTES */
  73. Y='A';      /* Y IS IN SINGLE 
  74.                QUOTES */
  75. PRINTF("X IS %S AND Y IS %S",X,Y); 
  76. /* BOTH PRINTED AS A %STRING? */
  77.  
  78. ╫HAT DO YOU THINK WILL BE PRINTED?
  79.  
  80. X IS A AND Y IS  
  81.  
  82. ╘HE X-STRING IS OK..BUT NOT THE Y!
  83.  
  84. ╔F X IS DEFINED AS A STRING (USING 
  85. THE DOUBLE QUOTES) AND IS PRINTED 
  86. (VIA PRINTF()) USING THE %STRING 
  87. FORMAT, THEN THE PRINTOUT IS OK. ┬UT 
  88. IF Y IS DEFINED AS A SINGLE CHARACTER 
  89. (USING SINGLE QUOTES) BUT IS PRINTED 
  90. USING THE %STRING FORMAT THEN 
  91. PRINTF() GETS CONFUSED (..OR MAYBE 
  92. IT'S WE WHO ARE CONFUSED!).  ╘HIS 
  93. SAYS SOMETHING INTERESTING ABOUT 
  94. PRINTF().
  95.  
  96. ╫HEN WE TELL PRINTF() TO PRINT A 
  97. %STRING (EITHER X OR Y) PRINTF() 
  98. EXPECTS THE ADDRESS OF THE FIRST 
  99. CHARACTER OF THE STRING. ╫HEN WE ASK 
  100. TO PRINTF() A %CHARACTER IT EXPECTS 
  101. THE ACTUAL CHARACTER ITSELF.  
  102.  
  103. ╫E NORMALLY DON'T WORRY ABOUT 
  104. THIS...JUST DEFINE THE VARIABLE X AS 
  105. A STRING (USING DOUBLE QUOTES) AND 
  106. ASK PRINTF() FOR THE %S FORMAT AND,
  107. AUTOMATICALLY, THE ADDRESS OF X IS 
  108. GIVEN TO PRINTF() AND PRINTING BEGINS 
  109. WITH THE FIRST CHARACTER FOUND AT 
  110. THAT ADDRESS AND CONTINUES UNTIL THE 
  111. LAST CHARACTER (...AND HOW DOES 
  112. PRINTF()  KNOW WHEN IT HAS REACHED 
  113. THE LAST CHARACTER? ... PATIENCE).  
  114.  
  115. ╔F  WE DEFINE Y USING SINGLE QUOTES 
  116. AND USE THE %C FORMAT IN PRINTF() 
  117. THAT'S OK TOO. ╘HE C LANGUAGE LOOKS 
  118. AFTER GIVING THE ACTUAL CHARACTER TO 
  119. PRINTF() (RATHER THAN THE ADDRESS).  
  120.  
  121.  
  122. X="Z";  /* X IS IN DOUBLE QUOTES */
  123. PRINTF("X IS %S",X);   
  124.  
  125. X IS Z    
  126. /* THIS IS THE PRINTOUT..OK! */
  127.  
  128. ╔F %S IS USED IN THE PRINTF() 
  129. STATEMENT, AND IF X IS DECLARED AND 
  130. DEFINED AS A STRING, THEN C WILL LOOK 
  131. AFTER GIVING TO PRINTF() THE ADDRESS 
  132. WHERE X IS STORED.  
  133.                                                                         
  134. ╬OW CONSIDER:
  135.  
  136. Y='Z';  /* Y IS IN SINGLE QUOTES */
  137. PRINTF("Y IS %C",Y);   
  138.  
  139. Y IS Z     
  140. /* THIS IS THE PRINTOUT..OK! */
  141.  
  142. ╚ERE Y IS IN SINGLE QUOTES (HENCE A 
  143. SINGLE CHARACTER) AND THE %C TELLS 
  144. PRINTF() THAT THE 'VALUE' OF Y WHICH 
  145. IT RECEIVES IS TO BE INTERPRETED AS 
  146. THE ACTUAL CHARACTER ITSELF (IN THIS 
  147. EXAMPLE, THE CHARACTER Z), SO A Z IS 
  148. (CORRECTLY) PRINTED.  
  149.  
  150. ╬OW CONSIDER:
  151.  
  152. Y='Z';  /* Y IS IN SINGLE QUOTES */
  153. PRINTF("Y IS %S",Y);   
  154.  
  155. Y IS 
  156. /* THIS IS THE PRINTOUT NOT OK! */
  157.  
  158. ╬OW Y IS A SINGLE CHARACTER (Z, IN 
  159. SINGLE QUOTES)  BUT BECAUSE WE ASKED 
  160. TO HAVE IT PRINTED AS A %STRING, 
  161. PRINTF() GOES TO THE MEMORY ADDRESS 
  162. GIVEN BY THE 'VALUE' OF Y AND PRINTS 
  163. CHARACTERS ON THE SCREEN (ACCORDING 
  164. TO THE NUMBERS IT FINDS IN MEMORY)!  
  165. ╘HE 'VALUE' GIVEN TO PRINTF() WAS 
  166. USED AS A POINTER INSTEAD OF THE 
  167. ACTUAL CHARACTER TO BE PRINTED...AND 
  168. PRINTF() WENT TO SOME STRANGE ADDRESS 
  169. IN MEMORY TO FIND THE %STRING TO 
  170. PRINT!!  
  171.  
  172. ┼VEN IF WE DO IT RIGHT AND DEFINE A 
  173. STRING WITH DOUBLE QUOTES AND USE %S 
  174. IN THE PRINTF() FORMAT (SO THE 
  175. ADDRESS OF THE BEGINNING OF OUR 
  176. STRING IS PASSED TO PRINTF()) 
  177. THEN....  HOW DOES PRINTF() KNOW WHEN 
  178. IT HAS COME TO THE END OF OUR 
  179. STRING??  
  180.  
  181. ╚OW DOES A STRING END? -
  182.  
  183. ╫HEN WE SAY X="HELLO"; THE C COMPILER 
  184. WILL PUT THE CORRECT 'VALUES' FOR THE 
  185. CHARACTERS H, E, L, L, O INTO MEMORY 
  186. AND ADD, AT THE END (AFTER THE O) THE 
  187. 'VALUE' 0.  IT IS THIS 'VALUE' 0 
  188. WHICH SIGNALS THE END OF THE STRING.
  189.  
  190.  
  191. ╬OTE: EVERY CHARACTER SUCH AS A, B, 
  192. Z, #, ETC.  HAS A CERTAIN 'VALUE' (OR 
  193. 'NUMBER') ASSOCIATED WITH IT. ╔N 
  194. ASCII (AMERICAN STANDARD CODE FOR 
  195. INFORMATION INTERCHANGE) THE 'VALUE' 
  196. OR 'NUMBER' ASSOCIATED WITH A IS 65 
  197. (IN DECIMAL) AND THE 'VALUE' OR 
  198. 'NUMBER' ASSOCIATED WITH 0 IS 48 (IN 
  199. DECIMAL).  ╬OTICE THAT IT IS NOT THE 
  200. 'NUMBER' 0 WHICH IS ASSOCIATED WITH 
  201. THE CHARACTER 0 BUT RATHER THE 
  202. 'NUMBER' 48! ╙O...THE 0 WHICH 
  203. TERMINATES STRINGS CANNOT BE CONFUSED 
  204. WITH THE CHARACTER  0.  ┴FTER ALL, 
  205. THE STRING MAY, IN FACT, BE DEFINED 
  206. BY: X="10" WHICH WILL BE STORED IN 
  207. MEMORY AS THE TWO 'NUMBERS' 
  208. ASSOCIATED WITH THE TWO CHARACTERS 1 
  209. AND 0 (NAMELY THE TWO 'NUMBERS' 49 
  210. 48) FOLLOWED BY THE TERMINATING 
  211. NUMBER 0.
  212.  
  213. ╔T IS POSSIBLE TO DEFINE A STRING BY 
  214. DEFINING AN ARRAY OF SINGLE 
  215. CHARACTERS. ┴LTHOUGH WE WILL TALK 
  216. (LATER) ABOUT ARRAYS, NOW IS AN 
  217. OPPORTUNE TIME TO TALK BRIEFLY ABOUT 
  218. SUCH A DEFINITION OF A STRING 
  219. BECAUSE, IN THIS INSTANCE, WE MUST 
  220. DEFINE THE LAST SINGLE CHARACTER IN 
  221. THE ARRAY AS THE SPECIAL TERMINATING 
  222. CHARACTER, 0.  
  223.  
  224. ╙PECIAL 0 -
  225.  
  226. ╩UST ONE WORD ABOUT 'STRING ARRAYS' -
  227.  
  228. CHAR X[10]; 
  229. /* DEFINES AN ARRAY OF 10 ELEMENTS */
  230. X[0]='A';
  231. /* FIRST ELEMENT IS CHARACTER A */
  232. X[1]='B';
  233. /* SECOND ELEMENT IS CHARACTER B */
  234. X[2]='';                   
  235. /* THIRD ELEMENT IS CHARACTER  */
  236. X[3]='\0';                  
  237. /* LAST ELEMENT IS THE 'NUMBER' 0! */
  238.  
  239. PRINTF("THE STRING IS %S",X);    
  240. /* PRINT THE STRING, UP TO THE 0 */
  241.  
  242. ╘HE PRINTOUT WOULD BE: 
  243.  
  244. THE STRING IS AB
  245.  
  246. ╬OTE THE STRANGE WAY WE HAD TO DEFINE 
  247. THE TERMINATING ELEMENT SO THAT C 
  248. WOULD RECOGNIZE IT AS THE 'NUMBER' 0  
  249. AND NOT THE 'CHARACTER' 0 ... WE USED  
  250. \0  INSIDE  SINGLE QUOTES IN THE 
  251. STATEMENT: 
  252.  
  253. X[3]='\0';                       
  254.                                                               
  255. ╧THER SPECIAL CHARACTERS LIKE \0  -
  256.  
  257. ╔N ORDER TO DEFINE THE SPECIAL 
  258. CHARACTER 0 WHICH TERMINATES A STRING 
  259. WE REFERRED TO IT AS \0. ╘HE 
  260. BACKSLASH \ NOTIFIES C THAT THE VERY 
  261. NEXT CHARACTER IS TO BE INTERPRETED 
  262. IN A SPECIAL MANNER. ╘HE BACKSLASH IN 
  263. C IS AN ESCAPE CHARACTER WHICH TELLS 
  264. THE COMPILER TO INTERPRET THE 
  265. CHARACTER WHICH IMMEDIATELY FOLLOWS 
  266. IN A PARTICLAR WAY (WE'VE SEEN THIS 
  267. KIND OF THING BEFORE: % MEANS THE 
  268. NEXT CHARACTER(S) IS 'SPECIAL' IN A 
  269. PRINTF() FORMAT....AS IN %S).  
  270.  
  271. ╘HERE ARE OTHER \CHARACTER 
  272. COMBINATIONS IN C. ╔N EACH CASE THEY 
  273. ARE USED TO DEFINE A CHARACTER WHICH 
  274. CANNOT (NORMALLY) BE TYPED INTO YOUR 
  275. TEXT. ╞OR EXAMPLE YOU MAY HAVE 
  276. NOTICED THAT THE STATEMENTS: 
  277.  
  278. CHAR X,Y;
  279. X="Z"; 
  280. Y='Z';
  281. PRINTF("X IS %S Y IS %C",X,Y);
  282.  
  283. ╫ILL PRINT: 
  284.  
  285. X IS Z Y IS Z 
  286.  
  287. ╬OW SUPPOSE WE WANTED TO PRINT:X IS Z 
  288. AND Y IS Z ON TWO SEPARATE LINES! 
  289. ╘HEN WE TELL PRINTF() TO PRINT A 
  290. 'SPECIAL' CHARACTER, \N, MEANING A 
  291. NEWLINE: 
  292.  
  293. CHAR X,Y;
  294. X="Z"; Y='Z';
  295. PRINTF("X IS %S \N Y IS %C",X,Y); 
  296. /* NOTICE THE \N */
  297.  
  298. ╘HIS IS THE PRINTOUT:
  299.  
  300. X IS Z  
  301.  Y IS Z 
  302.  
  303. ├AREFULLY NOTICE THE SPACE BEFORE THE 
  304. 'Y' AS WELL AS THE LINEFEED AND 
  305. CARRIAGE RETURN. THE LINEFEED-
  306. CARRIAGE-RETURN COMBINATION IS CALLED 
  307. A 'NEWLINE' AND REPRESENTED BY '\N'.
  308.  
  309. ╙PECIAL \CHARACTERS  -
  310.  
  311. ╫E HAVE THE FOLLOWING 'SPECIAL' 
  312. CHARACTERS: 
  313.  
  314. \N      THE NEW LINE.
  315. \T      THE TAB CHARACTER.
  316. \0      THE 0 TERMINATOR (NULL 
  317.         CHARACTER), ASCII 'VALUE' 0.
  318. \B      THE BACKSPACE.
  319. \"      THE DOUBLE QUOTE.
  320. \\      THE BACKSLASH CHARACTER.
  321.  
  322. ╫HAT WOULD THE FOLLOWING PRINT?
  323.  
  324. INT AGE;
  325. AGE=100;
  326. PRINTF("\"SAM\" IS %D YEARS OLD\T\T
  327.        TODAY.",AGE);
  328.  
  329. ╘HE PRINTOUT:
  330.  
  331. "SAM" IS 100 YEARS OLD         TODAY.
  332.  
  333. ╬OTICE THE QUOTATION MARKS AND TABS.                                     
  334.  
  335. ╧THER 'FORMAT' INFO YOU CAN GIVE TO 
  336. PRINTF().
  337. ╫E'VE SEEN THE %D (FOR DECIMAL NUMBER 
  338. PRINTOUTS) AND WE'VE SEEN %F (FOR 
  339. FLOATING POINT NUMBERS), AND %C AND 
  340. %S FOR CHARACTERS AND STRINGS, BUT WE 
  341. HAVE ALSO %O (FOR OCTAL NUMBERS) AND 
  342. %X (FOR HEXADECIMAL NUMBERS) AND %E 
  343. (NUMBERS EXPONENTIAL FORMAT, SUCH AS 
  344. -7.001100E+03). ╔N EACH CASE YOU MAY 
  345. QUALIFY THE ABOVE FORMAT INSTRUCTION 
  346. WITH A FIELD WIDTH SPECIFICATION, 
  347. SUCH AS: 
  348.  
  349. INT A=123;
  350. PRINTF("%6D",A);       
  351. /* PRINTOUT: 123 */
  352.  
  353. FLOAT B=123;
  354. PRINTF("%6.3F",B);
  355. /* PRINTOUT: 123.000 */
  356.  
  357. CHAR C='1';
  358. PRINTF("%6C",C);
  359. /* PRINTOUT:      1 */
  360. /* NOTE: CHAR IS RIGHT-JUSTIFIED */
  361.  
  362. CHAR D="123";
  363. PRINTF("%6S",D);
  364. /* PRINTOUT:   123 */
  365.  
  366. INT E=123;
  367. PRINTF("%6O",E);
  368. /* PRINTOUT:   173 */
  369. /* 'O' INDICATES AN OCTAL NUMBER */
  370.  
  371. FLOAT F=123;
  372. PRINTF("%6E",F);
  373. /* PRINTOUT:     1.230000E+02 */
  374.  
  375. INT G=123;
  376. PRINTF("%6X",G);
  377. /* PRINTOUT:    7B */
  378. /* 'X' INDICATES HEXADECIMAL NUMBER */
  379.  
  380.  
  381. ╟OOD FORM .. BAD FORM  -
  382.  
  383. ╘HE COMPOUND STATEMENT:
  384.  
  385. FLOAT B=123;PRINTF("%6.3F",B);
  386.  
  387. ╚ERE WE DECLARED B TO BE A FLOAT AND, 
  388. AT THE SAME TIME, WE DEFINED IT TO BE 
  389. 123 (AS IN FLOAT B=123;). ╘HAT'S 
  390. LEGAL AND HAVING THE DECLARATION AND 
  391. DEFINITION ON ONE LINE SAVES SPACE.
  392. ┬UT WE ALSO ADDED PRINTF("%6.3F",B); 
  393. ON THE SAME LINE.  ╘HAT'S CONSIDERED 
  394. BAD FORM BECAUSE IT MAKES A PROGRAM 
  395. VERY DIFFICULT TO READ. ┴VOID PLACING 
  396. MORE THAN ONE STATEMENT ON A LINE. 
  397.  
  398. ╬OTE: FOR FLOAT B=123; 6.3F DOESN'T 
  399. PROVIDE ENOUGH FIELD WIDTH (IF WE 
  400. WANT 3 DECIMAL PLACES) SO PRINTF() 
  401. EXPANDS THE FIELD WIDTH TO 7, AS 
  402. REQUIRED TO ACCOMMODATE 123.000, 
  403. WHERE THE DECIMAL POINT, PLUS 3 
  404. DIGITS BEFORE IT AND 3 AFTER IT, 
  405. MAKE A FIELD WIDTH OF 7.  
  406.  
  407. ┘OU WILL ALSO HAVE NOTICED THAT THE 
  408. STATEMENT: 
  409.  
  410. CHAR D="123";
  411. PRINTF("%6S",D);
  412. /* PRINTOUT:   123 */
  413.  
  414. ╘HE '123' IS RIGHT-JUSTIFIED IN A 
  415. FIELD WIDTH OF 6. YOU MAY ASK 
  416. PRINTF() TO LEFT-JUSTIFY THE 123 BY 
  417. SPECIFYING: 
  418.  
  419. CHAR D="123";
  420. PRINTF("%-6S",D);
  421. /* PRINTOUT: 123 */
  422.  
  423. ╬OTICE THE FORMAT SPECIFICATION %-6S 
  424. WITH '-' MEANING LEFT-JUSTIFY.  
  425.  
  426. ╔F B="1234567"; THEN (AS EXPECTED) 
  427. PRINTF() WILL MAKE THE FIELD WIDTH 7 
  428. (TO ACCOMMODATE 1234567)...EVEN IF WE 
  429. ASKED FOR %6S! ╔F YOU REALLY MEAN 6 
  430. (AND WANT TO CUT OFF THE STRING) THEN 
  431. USE THE SPECIFICATION: 
  432.  
  433. %.6S
  434.  
  435. CHAR D="1234567";
  436. PRINTF("%.6S",D);
  437. /* PRINTOUT: 123456 */
  438. /* NOTE THE .6 */
  439.  
  440. ┴ NOTE ON FORMAT SPECIFICATIONS  -
  441.  
  442. ╔F S HAS BEEN DECLARED AND DEFINED AS 
  443. A STRING: 
  444.  
  445. S="I'M A STRING"
  446.  
  447. (WITH 12 CHARACTERS) THEN WE MAY 
  448. SELECT ANY NUMBER OF CHARACTERS AND 
  449. PRINT THEN IN A SPECIFIED FIELD 
  450. WIDTH: 
  451.  
  452. PRINTF("%S",S);
  453. /* PRINTOUT: I'M A STRING */
  454.  
  455. PRINTF("%20.12S",S);
  456. /* PRINTOUT:           I'M A STRING */
  457.  
  458. PRINTF("%-20.12S",S); 
  459. /* PRINTOUT: I'M A STRING */
  460.  
  461. PRINTF("%20.10S",S);
  462. /* PRINTOUT:            I'M A STRI */
  463.  
  464. PRINTF("%-20.10S",S);
  465. /* PRINTOUT: I'M A STRI */
  466. /* PRINTS ONLY 10 CHARACTERS */
  467.  
  468. ═ORE NOTES ON FORMAT SPECIFICATIONS -
  469.  
  470. ╔F X HAS BEEN DECLARED AND DEFINED AS 
  471. AN INT: 
  472.  
  473. X=123
  474.  
  475. ╘HEN WE HAVE:
  476.  
  477. PRINTF("%D",X);
  478. /* PRINTOUT: 123 */
  479.  
  480. PRINTF("%10D",X); 
  481. /* PRINTOUT:       123 */
  482.  
  483. PRINTF("%-10D",X);
  484. /* PRINTOUT: 123 */
  485.  
  486. PRINTF("%010D",X);
  487. /* PRINTOUT: 0000000123 */
  488.  
  489. PRINTF("%010X",X);
  490. /* PRINTOUT: 000000007B */
  491. /* 'X' INDICATES HEXADECIMAL */
  492. /* THIS '0' PADS WITH 0'S */
  493.  
  494. ╙OME FINAL NOTES ON FORMAT -
  495.  
  496. ╔F X HAS BEEN DECLARED AND DEFINED AS 
  497. AN FLOAT: 
  498.  
  499. X=123.456
  500.  
  501. ╘HEN WE HAVE:
  502.  
  503. PRINTF("%F",X); 
  504. /* PRINTOUT: 123.456000 */
  505.  
  506. PRINTF("%10.4F",X);
  507. /* PRINTOUT       123.4560 */
  508.  
  509. PRINTF("%-10.2F",X);
  510. /* PRINTOUT 123.46 */
  511.  
  512. ╥EMEMBER NUMERICAL AND CHARACTER 
  513. VARIABLES ARE PASSED TO FUNCTIONS, 
  514. LIKE FOR EXAMPLE PRINTF(), BY VALUE.  
  515. ╘HIS MEANS THAT THE FUNCTION ISN'T 
  516. ACTUALLY USING THE INITIALLY-DEFINED 
  517. VARIABLE BUT A COPY OF IT WHICH IS 
  518. PRIVATE TO THAT FUNCTION. ╘HIS IS 
  519. WHAT IS MEANT WHEN IT IS SAID THAT C 
  520. IS A LANGUAGE WHICH UTILIZES 'CALL BY 
  521. VALUE'.  ╘HE IMPORTANCE OF 'CALL BY 
  522. VALUE' WILL BECOME INCREASINGLY CLEAR 
  523. AS YOU BECOME FAMILIAR WITH C.
  524. ╔N THE CASE OF STRINGS AND ARRAYS, 
  525. HOWEVER, THE FUNCTION IS RECEIVING A 
  526. POINTER TO THE FIRST ELEMENT IN 
  527. EITHER A STRING, OR, AN ARRAY (IN 
  528. FACT, A STRING IS AN ARRAY). 
  529. ┴ POINTER TO SOMETHING PROVIDES THE 
  530. ADDRESS OF THAT SOMETHING TO A 
  531. FUNCTION OR STATEMENT. ╘HE FUNCTION 
  532. IS, THEREFORE, WORKING DIRECTLY WITH 
  533. THE ORIGINALLY-DEFINED VARIABLE 
  534. ELEMENTS OF STRINGS AND ARRAYS.  
  535.  
  536. [END OF LESSON 2 OF 11]
  537.