int cmp(const void *a, const void *b)
{
const double *ad, *bd;
ad = (const double*)a;
bd = (const double*)b;
if (*ad < *bd)
{
return -1;
}
else if (*ad > *bd)
{
return 1;
}
else
{
return 0;
}
}
#include <iostream>
using namespace std;
void tnirp(const char* str)
{
if(*str)
{
tnirp(str+1);
cout << *str;
}
}
void print(const char* str)
{
if(*str)
{
cout << *str;
print(str+1);
}
}
int main()
{
const char str[]="Roses are red";
print(str);
cout << endl;
tnirp(str);
return 0;
}
i++;
(int&)i += sizeof(uint32_t);
std::string
не имелся в виду.char*
, хотя это тип указателя на один char
.char[8]
, принято передавать как указатель на его первый элемент: char*
. Более того, при передаче массива в функцию он автоматически разлагается (decays) до указателя на первый элемент.*(p+3)
или p[3]
, что одно и то же. Итак, указатель в коде C может указывать как на одну переменную, так и на целый массив (точнее, его начало).int
или любого другого типа обычно вместе с указателем на первый элемент передают размер массива. Но строки C завершаются нулевым символом, поэтому здесь длина известна и так. Вот и получается, что char*
используют вместо char[N]
.int (*arr)[10] = malloc(sizeof(*arr) * 5);
Не сортировка
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
template <typename T> int sgn(const T val) {
return (T(0) < val) - (val < T(0));
}
int main() {
std::vector<double> v = {0, 2, -1, -100, -3, 4, 1, -90};
std::cout << "Original: ";
std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
std::stable_sort(v.begin(), v.end(),
[](const double &a, const double &b) -> bool {
const int sa = sgn(a);
const int sb = sgn(b);
return sa < sb;
});
std::cout << "Sorted: ";
std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
return 0;
}
Original: 0 2 -1 -100 -3 4 1 -90
Sorted: -1 -100 -3 -90 0 2 4 1
Когда вызывается malloc() или new, то на самом деле вызывается какая-то win api функция?
И при удалении тоже?
И вот интересно, а как сделать маленькую кучу, чтобы память выделялась в пределах этой маленькой кучи только?