Я только что прочитал о расширении выражений операторов в GCC и обнаружил неожиданное поведение при его использовании.
Пожалуйста, обратите внимание на этот пример:
#include <stdio.h>
int main(void)
{
char* res1 = ({
char arr[] ={'h', 'e', '\0'}; // was char *arr[]
arr[0] = 'x';
char* ptr = arr;
ptr;
});
char* res2 = ({
char arr[] ={'h', 'e', '\0'}; // was char *arr[]
arr[0] = 'X';
char* ptr = arr;
ptr;
});
printf ("%s %p\n", res1, res1);
printf ("%s %p\n", res2, res2);
return 0;
}
Вывод:
X 0x7fff93098160
X 0x7fff93098160
Я заметил, что переменные arr
в первом блоке и arr
во втором блоке занимают один и тот же адрес памяти.
Почему это происходит ??