fork download
  1. #include <iostream>
  2. // #include <Windows.h>
  3. #include <typeinfo>
  4.  
  5. int main() {
  6. using std::cout;
  7. using std::endl;
  8. cout << "Трёхмерная массивная переменная f:\n";
  9. const int x{4}, y{5}, z{3};
  10. double f[z][y][x] =
  11. {
  12. {
  13. {0.01, 0.02, 0.03, 0.04},
  14. {0.11, 0.12, 0.13, 0.14},
  15. {0.21, 0.22, 0.23, 0.24},
  16. {0.31, 0.32, 0.33, 0.34},
  17. {0.41, 0.42, 0.43, 0.44}
  18. },
  19. {
  20. {1.01, 1.02, 1.03, 1.04},
  21. {1.11, 1.12, 1.13, 1.14},
  22. {1.21, 1.22, 1.23, 1.24},
  23. {1.31, 1.32, 1.33, 1.34},
  24. {1.41, 1.42, 1.43, 1.44}
  25. },
  26. {
  27. {25.4, 36.6, 69.1, 22.2},
  28. {11.7, 77.5, 12.2, 54.2},
  29. {90.4, 85.2, 81.9, 38.6},
  30. {13.5, 51.3, 19.8, 42.0},
  31. {66.6, 77.7, 88.8, 99.9}
  32. }
  33. };
  34. for(int i{}; i < z; ++i)
  35. {
  36. cout << "\nЭтаж " << i << "\n";
  37. for(int k{}; k < y; ++k)
  38. {
  39. cout << "\n";
  40. for(int l{}; l < x; ++l)
  41. cout << f[i][k][l] << "|";
  42. }
  43. }
  44. cout << endl; cout << endl;
  45. cout << " f..........." << f << endl;
  46. cout << " *f..........." << *f << endl;
  47. cout << " **f..........." << **f << endl;
  48. cout << " ***f..........." << ***f << " - значение начальной ячейки!" << endl;
  49. cout << endl;
  50. cout << " &f..........." << &f << " - адрес массивной переменной f" << endl;
  51. cout << endl;
  52.  
  53. cout << " *&f..........." << *&f << endl;
  54. cout << " **&f..........." << **&f << endl;
  55. cout << " ***&f..........." << ***&f << endl;
  56. cout << " ****&f..........." <<****&f << " - получение значения с адреса (разыменование указателя) начальной ячейки" << endl;
  57. cout << endl;
  58. cout << " Поименуем указатель т.е. выполним стэйтмент: double *ptrONf = ***&f; \n";
  59. double *ptrONf = ***&f;
  60. cout << " ptrONf................." << ptrONf << endl;
  61. cout << "Разыменуем указатель:\n";
  62. cout << " *ptrONf................." << *ptrONf << endl;
  63. cout << "Адрес указателя:\n";
  64. cout << " &ptrONf................." << &ptrONf << endl;
  65. cout << "Значение на адресе указателя:\n";
  66. cout << "*&ptrONf................." << *&ptrONf << endl;
  67. cout << "typeid( ptrONf).name().." << typeid( ptrONf).name() << endl;
  68. cout << "typeid( *ptrONf).name().." << typeid( *ptrONf).name() << endl;
  69. cout << "typeid( &ptrONf).name().." << typeid( &ptrONf).name() << endl;
  70. cout << "typeid(*&ptrONf).name().." << typeid(*&ptrONf).name() << endl;
  71. cout << endl;
  72. cout << "typeid( f).name()..." << typeid( f).name() << endl;
  73. cout << "typeid( *f).name()..." << typeid( *f).name() << endl;
  74. cout << "typeid( **f).name()..." << typeid( **f).name() << endl;
  75. cout << "typeid( ***f).name()..." << typeid( ***f).name() << " - тип значения в переменной f (double)" << endl;
  76. cout << endl;
  77. cout << "typeid( &f).name()..." << typeid( &f).name() << " - тип указателя на переменную f (double с координатами)" << endl;
  78. cout << endl;
  79. cout << "typeid( *&f).name()..." << typeid( *&f).name() << " - A[z]этажи_A[y]строки_A[x]столбцы" << endl;
  80. cout << "typeid( **&f).name()..." << typeid( **&f).name() << endl;
  81. cout << "typeid( ***&f).name()..." << typeid( ***&f).name() << endl;
  82. cout << "typeid(****&f).name()..." << typeid(****&f).name() << " - тип указателя на начальное значение" << endl;
  83. cout << endl;
  84. cout << " f[0][0][0]..........." << f[0][0][0] << endl;
  85. // cout << " *f[0][0][0]..........." << *f[0][0][0] << endl; не компилируется
  86. cout << " &f[0][0][0]..........." << &f[0][0][0] << endl;
  87. cout << " *&f[0][0][0]..........." << *&f[0][0][0] << endl;
  88. cout << "typeid( f[0][0][0]).name()..." << typeid( f[0][0][0]).name() << endl;
  89. // cout << "typeid( *f[0][0][0]).name()..." << typeid( *f[0][0][0]).name() << endl; не компилируется
  90. cout << "typeid( &f[0][0][0]).name()..." << typeid( &f[0][0][0]).name() << endl;
  91. cout << "typeid( *&f[0][0][0]).name()..." << typeid(*&f[0][0][0]).name() << endl;
  92. cout << endl;
  93. cout << "Пример из урока 82\n"; cout << endl;
  94. int array[4] = { 5, 8, 6, 4 };
  95. cout << " array..........." << array << endl;
  96. cout << "typeid( array).name()..." << typeid( array).name() << endl;
  97. // Разыменование массива (переменной array) приведёт к возврату первого элемента массива (элемента под номером 0)
  98. cout << " *array..........." << *array << endl; // выведется 5!
  99. cout << "typeid( *array).name()..." << typeid( *array).name() << endl;
  100. cout << " &array..........." << &array << endl;
  101. cout << "typeid( &array).name()..." << typeid( &array).name() << endl;
  102. cout << " *&array..........." << *&array << endl;
  103. cout << "typeid(*&array).name()..." << typeid(*&array).name() << " - A[4]столбцы_тип" << endl;
  104. cout << endl;
  105. int *ptrONarray = array;
  106. cout << " ptrONarray.................." << ptrONarray << endl;
  107. cout << "typeid( ptrONarray).name()..." << typeid( ptrONarray).name() << endl;
  108. cout << " *ptrONarray.................." << *ptrONarray << endl;
  109. cout << "typeid( *ptrONarray).name()..." << typeid( *ptrONarray).name() << endl;
  110. cout << " &ptrONarray.................." << &ptrONarray << endl;
  111. cout << "typeid( &ptrONarray).name()..." << typeid( &ptrONarray).name() << endl;
  112. cout << "&*ptrONarray.................." <<&*ptrONarray << endl;
  113. cout << "typeid(*&ptrONarray).name()..." << typeid(*&ptrONarray).name() << endl;
  114. }
Success #stdin #stdout 0s 4428KB
stdin
Standard input is empty
stdout
Трёхмерная массивная переменная f:

Этаж 0

0.01|0.02|0.03|0.04|
0.11|0.12|0.13|0.14|
0.21|0.22|0.23|0.24|
0.31|0.32|0.33|0.34|
0.41|0.42|0.43|0.44|
Этаж 1

1.01|1.02|1.03|1.04|
1.11|1.12|1.13|1.14|
1.21|1.22|1.23|1.24|
1.31|1.32|1.33|1.34|
1.41|1.42|1.43|1.44|
Этаж 2

25.4|36.6|69.1|22.2|
11.7|77.5|12.2|54.2|
90.4|85.2|81.9|38.6|
13.5|51.3|19.8|42|
66.6|77.7|88.8|99.9|

            f...........0x7ffd8bcf72e0
           *f...........0x7ffd8bcf72e0
          **f...........0x7ffd8bcf72e0
         ***f...........0.01 - значение начальной ячейки!

           &f...........0x7ffd8bcf72e0 - адрес массивной переменной f

          *&f...........0x7ffd8bcf72e0
         **&f...........0x7ffd8bcf72e0
        ***&f...........0x7ffd8bcf72e0
       ****&f...........0.01 - получение значения с адреса (разыменование указателя) начальной ячейки

 Поименуем указатель т.е. выполним стэйтмент: double *ptrONf = ***&f; 
 ptrONf.................0x7ffd8bcf72e0
Разыменуем указатель:
 *ptrONf.................0.01
Адрес указателя:
 &ptrONf.................0x7ffd8bcf72c0
Значение на адресе указателя:
*&ptrONf.................0x7ffd8bcf72e0
typeid(  ptrONf).name()..Pd
typeid( *ptrONf).name()..d
typeid( &ptrONf).name()..PPd
typeid(*&ptrONf).name()..Pd

typeid(     f).name()...A3_A5_A4_d
typeid(    *f).name()...A5_A4_d
typeid(   **f).name()...A4_d
typeid(  ***f).name()...d - тип значения в переменной f (double)

typeid(    &f).name()...PA3_A5_A4_d - тип указателя на переменную f (double с координатами)

typeid(   *&f).name()...A3_A5_A4_d - A[z]этажи_A[y]строки_A[x]столбцы
typeid(  **&f).name()...A5_A4_d
typeid( ***&f).name()...A4_d
typeid(****&f).name()...d - тип указателя на начальное значение

            f[0][0][0]...........0.01
           &f[0][0][0]...........0x7ffd8bcf72e0
          *&f[0][0][0]...........0.01
typeid(     f[0][0][0]).name()...d
typeid(    &f[0][0][0]).name()...Pd
typeid(   *&f[0][0][0]).name()...d

Пример из урока 82

         array...........0x7ffd8bcf72d0
typeid(  array).name()...A4_i
        *array...........5
typeid( *array).name()...i
        &array...........0x7ffd8bcf72d0
typeid( &array).name()...PA4_i
       *&array...........0x7ffd8bcf72d0
typeid(*&array).name()...A4_i - A[4]столбцы_тип

  ptrONarray..................0x7ffd8bcf72d0
typeid(  ptrONarray).name()...Pi
 *ptrONarray..................5
typeid( *ptrONarray).name()...i
 &ptrONarray..................0x7ffd8bcf72c8
typeid( &ptrONarray).name()...PPi
&*ptrONarray..................0x7ffd8bcf72d0
typeid(*&ptrONarray).name()...Pi