В тази кратка статия ще разгледаме някои специални теми, свързани с указателите в C и C++ и методи за Code Obfuscation, директно свързани с тях (и не само :) )
Първо да разгледаме по-подробно декларацията на масиви.
За да декларираме обикновен едноизмерен такъв пишем:
CODE
Така вече имаме указател към първия елемент, а до останалите имаме достъп директно чрез този указател. Сега да инициализираме масива, като използваме тези указатели, а не
[]
CODE1
2
3
4
5
| for(int i = 0; i < 5; ++i)
{
*(a+i) = i*i; printf("%i\n",*(a+i)); } |
Виждаме, че
a[i] е същото като
*(a+i), което е същото като
*(i + a) от разместителното свойство, което по същата логика е еднакво с i[a]. Малко странно на пръв поглед, но наистина няма значение в C++ дали ще напишем
ImeNaMasiva[index] или
index[ImeNaMasica]
Ето и един тест, който потвърждава това:
CODE1
2
3
4
5
6
| int p[5];
for(int i = 0; i < 5; ++i)
{
p[i] = i;
cout << i[p] << endl; } |