Инкремент указателя возвращает неверное значение
Столкнулся с одной странностью...
Есть функция с переменным числом аргументов:
void func(int32_t a, int32_t b, int32_t c){
int32_t* ptr = &a;
printf("%d\n", *(ptr++));
printf("%d\n", *(ptr++));
printf("%d\n", *(ptr++));
printf("%d\n", *(ptr++));
printf("%d\n", *(ptr++));
}
По какой-то причине выражение ptr++ не перемещает меня с &a к &b, а выдаёт 0, будто-бы int32_t = 2 байта???
Вот ожидаемый вывод:
1
2
3
4
5
Но по какой-то причине выводиться это:
1
0
2
0
3
Я полагаю дело в компиляторе?
Ответы (2 шт):
Автор решения: TheCPPNoob
→ Ссылка
Как написали в комментариях - используйте stdarg.h, и будет вам счастье.
Автор решения: Сергей Симонов
→ Ссылка
В стандарте С не оговаривается как именно компилятор должен реализовывать размещение аргументов функции на стеке.
В вашем случае результат говорит о том, что компилятор положил аргументы функции на стек с 64-битным выравниванием. Это нормально.