Массивы и арифметика указателей:
#include <iostream>
int main(){
int a[]= {1,1,1,1, 1,1,1,1, 1,1,1,1};
*((long long *)a + 2) = 0;
for(int i = 0; i < 12; i++){
std::cout << (int)a[i] << " ";
}
}
int main(){
int a2[] = {1, 2, 3, 4, 5, 6};
int a3 = (1 + 3)[a2] - a2[0] + (a2 + 1)[2];
}
#include <iostream>
int main(){
char str[5] = "emacs";
std::cout << str << "\n";
}
#include <iostream>
int main(){
int str[5] = {1,2,3};
std::cout << str[-2] << "\n";
std::cout << str[3] << "\n";
}
int main(){
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int a2 = a[&a[3] - &a[1] + &a[9] - &a[5]];
}
#include <iostream>
int main(){
int *ptr = (int*)1024;
ptr = ptr + 2;
std::cout << (long)ptr << std::endl;
}
int main(){
int *ptr1 = (int*)1000;
int *ptr2 = (int*)2000;
int p = ptr2 - ptr1;
}
Вопросы для развлечения
int main(){
int a<::> = <%1, 2, 3, 4, 5, 6%>;
}
#include <iostream>
int main(){
char str[] = "const int";
char *p = str;
std::cout << (p + p[4] - p[2]) << std::endl;
}
&a[i] -- это адрес элемента i, результатом вычитания адресов
будет количество элементов между эти адресами.
&a[3] - &a[1] = 3 - 1 = 2
&a[9] - &a[5] = 9 - 5 = 4
a[2 + 4] = a[6] = 7