#include <iostream>
#include <limits>
int main() {
int num = 0;
while(num != -1) {
std::cout << "Enter the number to push: ";
std::cin >> num;
if(std::cin.fail()){
std::cout << "It is not number" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<int>::max(), '\n');
} else{
std::cout << "num = " << num << std::endl;
}
}
return 0;
}
indent_style = tab
indent_size = 4
void * calloc (size_t num, size_t size)
{
void * mem = malloc(num * size);
memset(mem, 0, num * size);
return mem;
}
int a = 0x33323130;
char * c = (char*)&a;
printf("%c %c %c %c\n", c[0], c[1], c[2], c[3]);
PrintArray
и SourceArray
. Код у них один и тот же.BubbleSort
по указателю, то есть, если BubbleSort
меняет массив, то он меняется вообще.BubbleSort
скопировать массив, и в функцию передать копию. Например:int array_copy[size];
memcpy(array_copy, array, size);
void foo(int ** arr, int N, int M)
{
...
}
int main()
{
int N = 10; // первое измерение массива
int M = 20; // второе измерение массива
int ** arr = new int * [N];
for(int i = 0; i < M; ++i)
{
arr[i] = new int[M];
}
...
foo(arr, N, M);
...
// Тут освобождение массива аналогично выделению в обратном порядке
}
void foo(int * arr, size_t N, size_t M)
{
...
}
int main()
{
int N = 10; // первое измерение массива
int M = 20; // второе измерение массива
int * arr = new int * [N*M];
int * arrcur = arr; // временный указатель для обхода массива
int * arrone = arr; // вариант с переходом к одномерному массиву
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j)
{
// Вариант с вычислением адреса текущего элемента по индексам
*(arr + i * M + j) = rand() % 10; // вычисление нужного индекса на месте
// Вариант с обходом массива с помощью временного указателя
*arrcur = rand() % 10;
++arrcur; // переход к следующему элементу
// Вариант с переходом к одномерному массиву
arrone[j] = rand() % 10;
}
arrone += M;
}
...
foo(arr, N, M);
...
delete[] arr;
}
#include <array>
template<std::size_t ColumnCount, std::size_t RowCount >
int foo(int (&matrix)[ColumnCount][RowCount]){
int r = 0;
for(auto& row: matrix){
for(auto& x: row)
r += x;
}
return r;
}
int bar(){
int matrix [][2] = {{1, 2}, {3, 4}, {4, 6}};
return foo(matrix);
}
std::array
, но двумерный C-массив нельзя напрямую привести к std::array<std::array<int, M>, N>
. Но можно изначально работать с std::array
:template<std::size_t ColumnCount, std::size_t RowCount >
int foo(std::array<std::array<int, RowCount>, ColumnCount>& matrix){
int r = 0;
for(auto& row: matrix){
for(auto& x: row)
r += x;
}
return r;
}
int bar(){
std::array<std::array<int, 2>, 3> matrix = {{{1, 2}, {3, 4}, {4, 6}}};
return foo(matrix);
}