1.没有区别
执行顺序:for(1;2;4){3;} while(1){2;}
执行效率(下面是vc下的反汇编结果):
程序代码:
7: for (i = 0;i < 5;++i);
00401028 mov dword ptr [ebp-4],0
0040102F jmp main+2Ah (0040103a)
00401031 mov eax,dword ptr [ebp-4]
00401034 add eax,1
00401037 mov dword ptr [ebp-4],eax
0040103A cmp dword ptr [ebp-4],5
0040103E jge main+32h (00401042)
00401040 jmp main+21h (00401031)
8: i = 0;while (i < 5) ++i;
00401042 mov dword ptr [ebp-4],0
00401049 cmp dword ptr [ebp-4],5
0040104D jge main+4Ah (0040105a)
0040104F mov ecx,dword ptr [ebp-4]
00401052 add ecx,1
00401055 mov dword ptr [ebp-4],ecx
00401058 jmp main+39h (00401049)
while比for少一行,所以理论上while效率高,但实际应用很灵活
2.反汇编代码不贴了,只告诉你一件事,c标准没有优明确规定这种代码执行的顺序,对于不同编译器,结果不一定是相同的
3.在执行strcpy的时候,string[10]被改写为'\0',puts遇到'\0'输出结束,但这属于未定义行为。你不知道string[10]是什么位置,也许存放着某些有用的东西。
vc下作的这个测试:
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
int tmp = -1;
char string[8];
char *p = "01234567";
strcpy(string,p);
puts(string); //01234567
printf("%d\n", tmp); //-256
return 0;
}