You are on page 1of 31

(201314)

gepap@aueb.gr

:
(
)

:2013

2C/C++
/:
(byvalue)
(byreference)


Java(Java
),
(
)
,

int incr(int arg) {

// To arg .

arg++;

//

return arg;

// .

int main() {
int i = 1, j = 0;
j = incr(i);

// j.

cout << i << ", " << j;

// 1, 2".

int incr(int *arg) { //


*arg++;
//
//
//
//
//
return *arg;
//
}

To arg .

: (
arg: ),
,

.

int main() {
int i = 1, j = 0;
int p_i = &i;
j = incr(p_i);
cout << i << ", " << j;
}

// i j.
// 2, 2.

(.
),
,
:
int i = 1, j = 0;
p_i = &i;
j = incr(&i);

int incr(int *arg) {


*arg++;
return *arg
}

&i
0x16F0

i (1)

0x16F0

i (1)

0x16F4

j(0)

0x16F4

j(0)

0x16F8

p_i (0x16F0)

0x16F8

p_i (0x16F0)

0x1AEC

arg (0x16F0)
7

;
,C/C++

,
&

int incr(int&

arg) {

arg++;
return arg;

// To arg
// .
/ arg ,
// i main.
//
// arg.
// .

}
int main() {
int i = 1, j = 0;
j = incr(i);
cout << i << ", " << j;
}

// j i.
// "2, 2".

,
()
,
()


nullptr (,
)
10

C/C++Java

(byvalue)
(byreference)

(byvalue)

,
(.
!)
:
voidMethod(Objectdata),
Object
byvalue

11

,
,.
int myFun(vector<int> v);

.... myFun(someVector), vectorv


myFunsomeVector (
!).
someVectorv.

()
,.
int myFun(vector<int>& v); //

.. .. myFun(someVector),
vmyFunsomeVector.

12

(byvalue),


,
(const):
. int myFun(const int & v);

13

int myFun(vector<int>& v);

., .. myFun(someVector)
myFun someVector.
int myFun(const vector<int>&

v);

. .. myFun(someVector)
myFun someVector.

,
(
)
const

byvalue!
14

void f(string& arg) {

cout << arg; }

void g(const string& arg) { // .


cout << arg;
}
int main() {
string s1 = "hello";

// s1 .

const string s2 = "world";

// s2 .

f(s1);

// OK.

f(s2);

// . f
// s2.

g(s1);

g(s2);

g(s1 + s2);

// OK .
// const string
// , .

f(s1 + s2);
}

// .
// .
15

,intarg[] int*arg
.( floatarg[]float*arg.)

X voidincr(int arg[3],int size);// .


voidincr(int arg[],int size);//T :
voidincr(int*arg,int size);

16

int main() {
int myArray[] = {1, 2, 3};
incr(myArray, 3);

// myArray .

// incr, arg
// myArray, myArray.
for(int i = 0; i < 3; i++) {
cout << myArray[i] << endl;

// 2, 3, 4.

}
}
void incr(int* arg, int size) {

// arg
// myArray main.

for(int i = 0; i < size; i++) {


arg[i]++;
}
}

// main.
//
// ,
17

#include <iostream>
using namespace std;

int main( int argc, char* argv[] ) { // char** argv


for(unsigned i = 0; i < argc; i++) {
cout << argv[i] << endl;
}
}


.
.
.

18

> myprog.exe first second

argv
argc =3

( char)
( char)
( char)

char*argv[]

:char**argv

's'
'e'
'c'
'o'
'n'
'd'
'\0'

'f'
'i'
'r'
's'
't'
'\0'

'm'
'y'
'p'
'r'
'o'
'g'
'\0'

19

int f(int& arg) {

// arg i main.

arg++;

// arg.

return arg;

// i main.

}
int main() {
int i = 1;
f(i);

// i = 2. (2) .

int j = f(i); // i = 3. (3) j.


i++;

// i = 4.

cout << j << << i << endl;

// 3 4.

cout << f(i) << endl;

// 5.

// f(i) = 10;

// .
// 6=10
20

int& g(int& arg) { // arg i main.


arg++;

// arg.

return arg;
}


:
!
(
,)
.
21

int main() {
int i = 1;
int& ref = i;

// i.

g(i);

// i = 2. g(i)

int j = ref;

// j i, j = 2

j = g(i);

// i = 3. To j i, 3

int& r = g(i); // i = 4. To r
// g(i), i.
int& r2 = f(i);

//

r++; cout << i << endl; // i = 5. 5.

cout << g(i) << endl;

// i = 6, 6

g(i) = 10;

// i = 7, i = 10,
// g(i) i.
22

,
:

float * CreateRampSequence(size_t elements) {


float * data = new float[elements] ();
for (size_t i = 0; i<elements; i++ )
data[i] = i;
return data;
}

delete[]

23


newnew[](
),,
:
void ReleaseSequence(float * data) {
if (data != nullptr)
delete[] data;
}

24

/
default :
void print(int i, const string& s = "the value is: ");
int main() {
int i = 5;
print(i, "i = ");

// i = 5.

print(i);

// the value is: 5.

}
// .
// , :
void print(int i, const string& s) {
cout << s << i << endl;
}
25

void g(int i, int j = 0, float f = 1.0f);

,
.
X void g(int i, int j = 0, float f);
// . f.

26

void print(float f);

// float.

void print(string s);

// string.

void print(float arg[], unsigned size); // float.


int main() {
float f = 5.0F;

int i = 10;

string s = "test";

float arr[] = {1.0F, 2.0F, 3.0F};

print(f);

// .

print(s);

// .

print(arr, 3);

// .

print(i);

//
// i float.

3 print()
27

void print(float f) {
cout << f << endl;
}
void print(string s) {
cout << s << endl;
}
void print(float arg[], unsigned size) {
for(unsigned i = 0; i < size; i++) {
cout << arg[i] << endl;
}
}
28

void f(int i);

//

int f(int i);

// .

void g(string s);

//

void g(string& s);

// .

void h(string& s);

// ,

void h(const string& s);


// 2
// 1 .

29

inline,
,

stackframe

(/,)
inline
,
,

,inline
()

30

void print(int arg)


{
cout << "value: "
<< arg;

inline void print(int arg) {


cout << "value: " << arg;
}
int main() {
int i = 10;
print(i);
{ int arg = i;
cout << "value:" << arg;}

int main() {
int i = 10;
print(i);

i = 20;
print(i);
}

i = 20;
print(i);
{ int arg = i;
cout << "value:" << arg;}
}

31