// test_C.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
void PrintChar(int i);
const int two = 2;
int order = 0;
void Gen_init(char *string)//防止数组最后出现逗号(,)的方法
{
static char sep = ' ' ;//static类型
cout << sep << " " << string << endl;
sep = ',';
}
int f()
{
cout << "f:" << ++order << endl;
return 1;
}
int g()
{
cout << "g:" << ++order << endl;
return 2;
}
int h()
{
cout << "h:" << ++order << endl;
return 3;
}
int g(int a, int b)
{
if(a%b == 0)
return b;
else
g(b, a%b);
}
struct SA{
int a;
char b;
double c;
};//sizeof == 16
struct SB{
int a;
double c;
char b;
};// sizeof == 24
#pragma pack(push) //保存对齐状态
#pragma pack(4) //设定为字节对齐
struct SC
{
char m1;
double m4;
int m3;
};// sizeof == 16(n==4); sizeof == 24(n==8,16,24....)
#pragma pack(pop)//恢复对齐状态
struct StructArray{//数组封装在结构体中的妙用
int a[10];
};
union BIT32{//联合的妙用
int i;
struct{char c0,c1,c2,c3;}byte;
};
typedef struct StructArray Array;
bool StrEqu(const char* const str1, const char* const str2)//将strcmp封装成这样更好
{
return !strcmp(str1,str2);
}
int p[10] = {1,2,3,4,5,6,7,8,9,0};
void AutoChangeType(float i);
void AutoChangeType(float i)
{
printf("%f/n",i);
}
int bss[100];
int data[100] = {1,2,3,4,5,6,7,8,9,0,11};
int _tmain(int argc, _TCHAR* argv[])
{
AutoChangeType(100);
int *pc = p;
cout << "指针本身的地址:" << &pc << endl
<< "指针所指的地址:" << pc << endl
<< "指针所指的数组第一个元素的地址:" << &pc[0] << endl
<< "指针所指的数组第一个元素的值:" << *pc << endl;
PrintChar(5);
if(StrEqu("abc","abc"))
cout << "Yes" << endl;
else
cout << "No" << endl;
BIT32 bb;
bb.i = 0x12345678;
cout << hex << bb.i << " "
<< (int)bb.byte.c0 << " "
<< (int)bb.byte.c1 << " "
<< (int)bb.byte.c2 << " "
<< (int)bb.byte.c3 << endl;
Array arr1, arr2;
for(int ii=0; ii<10; ++ii)
arr1.a[ii] = ii;
arr2 = arr1;
for(int ii=0; ii<10; ++ii)
cout << arr2.a[ii] << " ";
cout << endl;
cout << sizeof(SA) << " " << sizeof(SB) << " " << sizeof(SC) << endl;
int a,b;
//cin >> a >> b;
//cout << g(a,b) << endl;
int *pa = new int(10);
int *pb = new int(2);
*pa = *pa / *pb;// /后必须有空格
char line[10];
//gets(line);//小心溢出
//cout << line << endl;
int i=0;
//std::cin >> i;
switch(i)
{
case 1:
std::cout << 1 << std::endl;
break;
case two:
std::cout << 2 << std::endl;
break;
default:
;
}
printf("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
"cccccccccccccccccccccccccccccccccccccccccccccccc/n");//3字符串自动合并成串
for(int i=0; i<3; ++i)
Gen_init("abc");
int x = f() + g() * h();//不同的编译器,fgh的调用顺序可能不同
cout << x << endl;
return 0;
}
//extern int* p;
extern int p[];
void PrintChar(int i);
void PrintChar(int i)
{
cout << p << endl;
cout << &p[i] << endl;
cout << p[i] << endl;
}
#include <stdio.h>
void AA(void)
{
printf("Oh my God, Dangerous!/n");
}
void ChangeReturn(int i)
{
printf("%d/n",i);
__asm
{
lea edi, [esp+34h*4] // 获得函数返回地址在栈中的地址
mov ecx, [edi] //保存返回地址
mov [edi+4], ecx //将返回地址移到参数i在栈中的位置(覆盖参数)
lea esi, AA
mov [edi], esi//更改返回地址为函数AA
}
}
int main()
{
ChangeReturn(100);
printf("return to Main/n");
__asm
{
sub esp,4
}
return 0;
}
int main()
{
try{
int *pp = new int[10];
pp[-1] = 10;
pp[20] = 20;
cout << pp[-1] << " " << pp[20] << endl;
strcpy(0,"aaa");
__asm
{
mov edi, 0;
mov [edi], 5;
}
union U{
char a[10];
int i;
}u;
cout << sizeof(U) << endl;
int *p = (int*)(&u.a[1]);
*p = 0xffffffff;
for(int i=0; i<100; ++i)
cout << (int)u.a[i] << " ";
cout << endl;
int MB = 0;
//while(malloc(1 << 20)) ++MB;
printf("Allocated %d MB total/n", MB);
}
catch(...)
{
cout << "Exception" << endl;
}
return 0;
}
__setjmp3:
1027F608 mov edx,dword ptr [esp+4]
1027F60C mov dword ptr [edx],ebp
1027F60E mov dword ptr [edx+4],ebx
1027F611 mov dword ptr [edx+8],edi
1027F614 mov dword ptr [edx+0Ch],esi
1027F617 mov dword ptr [edx+10h],esp
1027F61A mov eax,dword ptr [esp]
1027F61D mov dword ptr [edx+14h],eax
1027F620 mov dword ptr [edx+20h],56433230h
1027F627 mov dword ptr [edx+24h],0
1027F62E mov eax,dword ptr fs:[00000000h]
1027F634 mov dword ptr [edx+18h],eax
1027F637 cmp eax,0FFFFFFFFh
1027F63A jne _s3_get_count (1027F645h)
1027F63C mov dword ptr [edx+1Ch],0FFFFFFFFh
1027F643 jmp _s3_done (1027F680h)
_longjmp:
10283554 push ebp
10283555 mov ebp,esp
10283557 sub esp,50h
1028355A mov ebx,dword ptr [esp+58h]
1028355E mov dword ptr [ebp-50h],80000026h
10283565 mov dword ptr [ebp-4Ch],0
1028356C mov dword ptr [ebp-48h],0
10283573 mov dword ptr [ebp-44h],0
1028357A mov dword ptr [ebp-40h],0
10283581 lea eax,[ebp-50h]
10283584 mov ebp,dword ptr [ebx]
10283586 mov esi,dword ptr [ebx+18h]
10283589 cmp esi,dword ptr fs:[0]
10283590 je _lj_local_unwind (102835A4h)
10283592 push ebx
10283593 push esi
10283594 push 0
10283596 push eax
10283597 push offset _lj_return (102835A2h)
1028359C push esi
1028359D call RtlUnwind (1023B78Ah)