65,186
社区成员




#include<windows.h>
#include<iostream>
#include<time.h>
using std::cin;
using std::cout;
using std::endl;//复杂化
//测试函数1==============
int text_1(double i,double j)
{
int delay_time=3000; //延时3s
if(i>=j)
{
Sleep(delay_time);
return i*10000;
}
else
{
Sleep(delay_time);
return j*10000;
}
}
//测试函数2==================
int text_2(double *i,double *j)
{
int delay_time=3000; //延时3s
if(*i>=*j)
{
Sleep(delay_time);
return *i*10000;
}
else
{
Sleep(delay_time);
return *j*10000;
}
}
//测试函数3======================
int text_3(double &i,double &j)
{
int delay_time=3000; //延时3s
if(i>=j)
{
Sleep(delay_time);
return i*10000;
}
else
{
Sleep(delay_time);
return j*10000;
}
}
//===========================
int main(void)
{
double num1,num2;
clock_t start,stop; //定义时钟
start = clock(); //开始时间
cout<<"Enter the num1 is ";
cin>>num1;
cout<<"Enter the num2 is ";
cin>>num2;
cout<<"The large number * 10000 is ";
cout<<text_1(num1,num2)<<" --> "<<(clock()-start)<<"ms"<<endl;
// 2) cout<<text_2(&num1,&num2)<<" --> "<<(clock()-start)<<"ms"<<endl;
// 3) cout<<text_3(num1,num2)<<" --> "<<(clock()-start)<<"ms"<<endl;
return 0;
}
struct foo {
int a;
int b;
int c;
...
int x;
int y;
int z;
};
void bar(
foo x,
foo * y,
foo & z
)
{}
foo f = { 1, 2, 3, ..., 24, 25, 26, };
bar(f, &f, f);
#include <iostream>
using std::cout;
using std::endl;
struct CData
{
int val[10];
};
void text_1(CData data)
{
cout<< "1: addr of data= " << &data << endl;
cout<< "3: val[0] = " << data.val[0] << endl;
}
void text_2(CData* pData)
{
cout << "2: addr of pData = " << pData << endl;
cout<< "3: val[0] = " << pData->val[0] << endl;
}
void text_3(CData& data)
{
cout<< "3: addr of data = " << &data << endl;
cout<< "3: val[0] = " << data.val[0] << endl;
}
int main()
{
CData mydata;
mydata.val[0] = 100;
cout<< "main: addr of mydata = " << &mydata.val << endl;
cout<< "main: val[0] = " << mydata.val[0] << endl;
text_1(mydata);
text_2(&mydata);
text_3(mydata);
return 0;
}
; 35 :
; 36 : text_1(mydata);
;--------------这里从stack分配了0x40个字节的空间-------------
00751 83 ec 28 sub esp, 40 ; 00000028H
00754 b9 0a 00 00 00 mov ecx, 10 ; 0000000aH
;--------------这里开始把mydata中的数据复制到新分配的空间上
00759 8d 75 d8 lea esi, DWORD PTR _mydata$[ebp]
0075c 8b fc mov edi, esp
0075e f3 a5 rep movsd
00760 e8 00 00 00 00 call ?text_1@@YAXUCData@@@Z ; text_1
00765 83 c4 28 add esp, 40 ; 00000028H
; 37 : text_2(&mydata);
;----------------------这里取mydata的地址到eax,然后把eax压栈,也就是说传入了地址------
00768 8d 45 d8 lea eax, DWORD PTR _mydata$[ebp]
0076b 50 push eax
0076c e8 00 00 00 00 call ?text_2@@YAXPAUCData@@@Z ; text_2
00771 83 c4 04 add esp, 4
; 38 : text_3(mydata);
;-----------------同传指针一样,这里也是取mydata的地址到ecx,然后把ecx压栈,同样是传入了地址------
00774 8d 4d d8 lea ecx, DWORD PTR _mydata$[ebp]
00777 51 push ecx
00778 e8 00 00 00 00 call ?text_3@@YAXAAUCData@@@Z ; text_3
0077d 83 c4 04 add esp, 4