我发现了一些有趣的东西,但是无法解释。
我正在编写一个简单的程序来反转一个字符串。这个程序运行良好,没有任何问题。
我的问题在于printf
函数。当我分别打印原始字符串时,它打印正确,但是当我将原始字符串作为第一个参数,将反转函数调用作为第二个参数进行打印时,两者都显示为反转后的字符串。
输出:
|| abcdthelgko ||
Orig Str: | okglehtdcba |, Rev Str | okglehtdcba |
代码:
char* ReverseStr(char* str, int len)
{
char *start = &str[0], *end = &str[len-1];
char temp;
while(start < end)
{
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
int main()
{
char str_unique[] = "abcdthelgko";
int str_unique_len = sizeof(str_unique)/sizeof(str_unique[0]);
printf("\n || %s || \n", str_unique);
printf("Orig Str: | %s |, Rev Str | %s |\n", str_unique, ReverseStr(str_unique, str_unique_len-1));
return 0;
}
* 反馈后的修改:* 为了测试以下两个理论: 1. Printf从右到左处理注释 2. 如果函数调用是参数之一,则在printf之前调用该函数, 我编写了另一个示例代码,只是更改通过引用传递的变量的值。 我看到的是,在变量值中,它可以正常工作: ================== 输出 ======================
i = 5, changed i = 2, again i= 2
changed i = 2, i= 2
i = 5, changed i = 2
================== CODE ======================
int* change (int* addr);
int main()
{
int i;
i=5;
printf("\n i = %d, changed i = %d, again i= %d \n ", i, *change(&i), i);
i=5;
printf("\n changed i = %d, i= %d \n", *change(&i), i);
i=5;
printf("\n i = %d, changed i = %d \n", i, *change(&i));
return 0;
}
int* change (int* addr)
{
*addr = 2;
return (addr);
}