Author: Pavel Kravtsov Language: c
Description: Arrays and Pointers Timestamp: 2013-05-11 21:59:33 +0000
View raw paste Reply
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void makeArray3(void); /* ??????? ?????? ?? 3? ???????? ? ??????? ???????? ?? ????? */
  6. void usingPointers(void); /* ??????? ?????? ?? 3? ???????? ? ??????? ???????? ?? ?????, ????????? ????????? */
  7. void useSwap(void); /* ?????? ??????? ???????? ???? ?????????? */
  8. void useSlength(void); /* ????????? ????? ?????? */
  9. char *getstr();       /* ???? ?????? */
  10.  
  11. int main()
  12. {
  13.     makeArray3();
  14.     usingPointers();
  15.     useSlength();
  16.     useSwap();
  17. return 0;
  18. }
  19.  
  20. void makeArray3(void)
  21. {
  22. int a[3];
  23. int i;
  24.     printf("Function makes an array with 3 elements\nInput elements: ");
  25.     for(i = 0; i < 3; ++i)
  26.         scanf("%d%*c", &a[i]);
  27.     for(i = 0; i < 3; ++i)
  28.         printf("a[%d] = %d\t", i, a[i]);
  29. }
  30.  
  31. void usingPointers(void)
  32. {
  33. int a[3];
  34. int *p=a, i;
  35.     printf("\n\nSame function, using pointers\nInput elements: ");
  36.     for(i = 0; i < 3; ++i)
  37.         scanf("%d%*c", &*(p+i));
  38.     for(i = 0; i < 3; ++i)
  39.         printf("p[%d] = %d\t", i, *(p+i));
  40.         free(p);
  41. }
  42.  
  43. void intSwap(int *a, int *b)      /* ?????? ??????? ???????? ???? ?????????? */
  44. {
  45. int t = *a;
  46.     *a = *b;
  47.     *b = t;
  48. }
  49.  
  50. void useSwap(void)
  51. {
  52. int x, y;
  53.     printf("\n\nFunction swaps x and y\nInput x, y: ");
  54.     scanf("%d%*c%d", &x, &y);
  55.     intSwap(&x, &y);
  56.     printf("Result    : x = %d\ty = %d\n", x, y);
  57. }
  58.  
  59. int slength(char *ptr)             /* ????????? ????? ?????? */
  60. {
  61. char *p = ptr;
  62.     for(; *p; ++p)
  63.         ;
  64. return p - ptr;
  65. }
  66.  
  67. void useSlength(void)
  68. {
  69. char buf[81];
  70. int l;
  71.     printf("\n\nFunction counts chars in a strig\nInput string...\n");
  72.     l = scanf("%80[^\n]", buf);          // l ????? ???????, ???? ??????? ???????, ???? ??? - ????
  73.         if(l == 0)
  74.             {                       // [^\n] ????????, ??? ?????? ????? ??????????? ?? ??????? \n
  75.             *buf = '\0';
  76.             scanf("%*c");
  77.             }
  78.     l = slength(buf);
  79.     printf("string \"%s\" has %d chars", buf, l);
  80. }
  81.  
  82. char *getstr()                      /* ???? ?????? */
  83. {
  84. char *ptr = (char *)malloc(1);
  85. char buf[81];
  86. int n, len = 0;
  87.  
  88.     *ptr = '\0';
  89.     do
  90.         {
  91.         n = scanf("%80[^\n]", buf);
  92.  
  93.         if(n < 0)
  94.             {
  95.             free(ptr);
  96.             ptr = NULL;
  97.             continue;
  98.             }
  99.  
  100.         if(n == 0)
  101.             scanf("%*c");
  102.  
  103.         else
  104.             {                      // strlen - ??????? ??? ???????? ????? ????-??????????????? ??????
  105.             len += strlen(buf);    // ??? ??????? ????????? ?????? (string.h)
  106.             ptr = (char *) realloc(ptr, len + 1);
  107.             strcat(ptr, buf);      // char *strcat(char *str1, const char *str2); (string.h)
  108.             }                      // strcat ???????????? ? ?????? str1 ????? ?????? str2 ? ?????????
  109.         }                          // ?????? str1 ??????? ????????, ?????????? ???????? ????????? str1
  110.     while(n > 0);
  111.  
  112. return ptr;
  113. }
  114.  
View raw paste Reply