Это из-за того, что comma
оператор & страница руководства operator
говорит , когда в выражении есть несколько запятых , затем решает из Left to Right
, но считает правее большинства аргумент.
В операторе
char* test = ("someChar", "someChar2", 3);
test
назначается самый правый аргумент, равный 3
.И теперь это выглядит как
char *test = 3;
, поскольку test
равно char pointer
и должно инициализироваться действительным адресом , а 3
не является действительным адресом.Поэтому, если вы просто печатаете test
, как printf("%d\n",test);
, это не вызывает никаких ошибок, но вызывает неопределенное поведение .И если вы собираетесь разыменовать его, например, *test
, то ваша программа будет аварийно завершена (ошибка Seg.), Это один из возможных сценариев, который вы должны учитывать при работе с указателями.