Guest User

Untitled

a guest
Mar 13th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. /*Урок 17. Строки. Часть1
  2.  
  3. 1. Особенности строк.
  4. 2. Ключевое слово const.
  5. 3. Строки и указатели
  6. 4. Аргументы в main.*/
  7.  
  8. #include <stdio.h>
  9.  
  10. void printString (const char * string)
  11. /*void printString (const char string[] это точно такая
  12. запись по смыслу*/
  13. {
  14. printf ("%s\n", string);
  15. }
  16.  
  17. void printArrayString (const char ** string)
  18. /*void printArrayString (const char * string[]) можно также записать*/
  19. {
  20. printf ("%s\n", string[0]);
  21. printf ("%s\n", string[1]);
  22. printf ("%s\n", string[2]);
  23.  
  24. }
  25.  
  26. int main (void)
  27. {
  28. char hello1[] = { 'H', 'e', 'l', 'l', '0', '1', '\0' };
  29. /* \0 указывает на то, это строка.
  30. Без этого знака - это просто массив символов.
  31. Строка завершается этим знаком.
  32. Данная комбинация предназначена для чтения, чтобы такие функции,
  33. как printf могли иметь индикатор конца строки, чтобы они читали
  34. символы посимвольно безостановочно, пока не наткнутся на данный символ.
  35. Пустые строки всегда содержат данный знак.*/
  36.  
  37. char hello2[] = "Hello2";
  38.  
  39. const char * hello3 = "Hello3";
  40. /*В этой третье форме мы не можем изменять
  41. изменять знечение в массиве, т.е. в том, в котором
  42. мы массив задекларировали с помощью указателя.
  43. Т.е. изменять можно, но с очень большой вероятностью
  44. может произойти ошибка. Т.е. эту строку мы можем
  45. использовать только для чтения.
  46.  
  47. Ключевое слово const. Это слово говорит о том, что
  48. знечение этой переменной изменять больше нельзя в
  49. процессе выполения программы. Только чтение.
  50. const char * hello3 = "Hello3";
  51. */
  52.  
  53. const char * hello4 = "Hello4";
  54.  
  55. printf ("%s\n", hello1);
  56. printf ("%s\n", hello2);
  57. printf ("%s\n", hello3);
  58.  
  59. hello1[0] = 'X';
  60. printf ("%s\n", hello1);
  61.  
  62.  
  63. printf ("%c\n", *hello3);
  64. printf ("%c\n", *hello4);
  65.  
  66. /*При const мы не можем менять значение,
  67. но мы можем менять адрес.
  68. %p - это маркер для выведения адреса*/
  69. printf ("Адрес дло присваивания: \n");
  70. printf ("Hello3: %p\n", hello3);
  71. printf ("Hello4: %p\n", hello4);
  72. hello3 = hello4;
  73. printf ("Адрес после присваивания: \n");
  74. printf ("Hello3: %p\n", hello3);
  75. printf ("Hello4: %p\n", hello4);
  76. /*const char * const hello4 = "Hello4"; говорит о том,
  77. что сейчас не может изменить и значение и адрес.*/
  78.  
  79. printString (hello3); //вызываем функцию
  80. printString (hello4);
  81.  
  82. const char * cities[] = { "Moscow", "New-York", "Tokyo" };
  83. /*Такой записью мы создаем массив строк, точнее сказать
  84. мы создаем массив адресов. Это многомерный массив.
  85.  
  86. Можно было бы задать этот массив так:
  87. const char cities[количество элементов массива][Общая длина строки] = { };
  88. const char cities[][] = { };
  89.  
  90. const char * cities[] = { "Moscow", "New-York", "Tokyo" };
  91. в этом случае компилятор сам рассчитывает длину строк и сколько памяти
  92. для этого необходимо. */
  93. printf ("\nCities:\n");
  94. printf ("%s\n", cities[0]);
  95. printf ("%s\n", cities[1]);
  96. printf ("%s\n", cities[2]);
  97.  
  98. // const float * prices[] = { {0,0}, {0,0}, {0,0} };
  99. /*Наглядная форма декларации многоменрного массива.
  100. Массив содержит три массива, каждый из которых содержит по два элемента.
  101. const float prices[3][2] = { {0, 0}, {0, 0}, {0, 0} }; можно было бы это записать
  102. в такой форме.*/
  103. printf ("\nГорода (выводим функцией многомерный массив): \n\n");
  104. printArrayString (cities);
  105.  
  106. return 0;
  107. }
Add Comment
Please, Sign In to add comment