У меня есть следующий код на C (я использую tdm-gcc 4.9.1 и Netbeans 8.0.2):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * pr(char * str);
int main(void)
{
char * x;
x = pr("Ho Ho Ho!");
return 0;
}
//*************************************
char * pr(char * str)
{
char * pc;
pc = str;
while (* pc)
{
putchar(* pc++);
printf(" %d %d\n", pc, str);
}
printf("\n");
printf(" %d %d\n", pc, str);
printf("\n");
do
{
putchar(* pc--); // alternate case: * --pc
printf(" %d %d\n", pc, str);
} while (pc - str);
return (pc);
}
В цикле do-while, когда аргумент внутри функции putchar
* pc--
У меня напечатан следующий результат (1-й столбец печатает строку «Хо-хо-хо!», по одному символу за раз, 2-й столбец печатает адрес указателя на char pc, тогда как 3-й столбец печатает адрес указателя на char str :
H 4206629 4206628
o 4206630 4206628
4206631 4206628
H 4206632 4206628
o 4206633 4206628
4206634 4206628
H 4206635 4206628
o 4206636 4206628
! 4206637 4206628
4206637 4206628
4206636 4206628
! 4206635 4206628
o 4206634 4206628
H 4206633 4206628
4206632 4206628
o 4206631 4206628
H 4206630 4206628
4206629 4206628
o 4206628 4206628
or
Ho Ho Ho!!oH oH o
Когда аргумент внутри функции putchar
* --pc
Соответствующий результат
H 4206629 4206628
o 4206630 4206628
4206631 4206628
H 4206632 4206628
o 4206633 4206628
4206634 4206628
H 4206635 4206628
o 4206636 4206628
! 4206637 4206628
4206637 4206628
! 4206636 4206628
o 4206635 4206628
H 4206634 4206628
4206633 4206628
o 4206632 4206628
H 4206631 4206628
4206630 4206628
o 4206629 4206628
H 4206628 4206628
or
Ho Ho Ho!!oH oH oH
Мой вопрос заключается в следующем: в чем разница между постфиксным и префиксным оператором декремента в отношении вывода функции putchar внутри цикла do-while?
Любая обратная связь будет принята с благодарностью.
printf
, вы следует использовать формат"%p"
. - person Some programmer dude   schedule 25.09.2015printf(" %p %p\n", (void*) pc, (void*) str);
иначе вы получите UB - person Giorgi Moniava   schedule 25.09.2015