0% found this document useful (0 votes)
10 views

1st Sem, ITP, Lecture 10-Algorithms & Computing

This lecture discusses passing arguments to functions by reference using pointers. It explains that pointers can be used to simulate pass-by-reference and modify the original argument values. Arrays are closely related to pointers, as array names represent pointers to the initial element. Both arrays and pointers can use subscript and offset notation to access elements.

Uploaded by

M Khattak
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views

1st Sem, ITP, Lecture 10-Algorithms & Computing

This lecture discusses passing arguments to functions by reference using pointers. It explains that pointers can be used to simulate pass-by-reference and modify the original argument values. Arrays are closely related to pointers, as array names represent pointers to the initial element. Both arrays and pointers can use subscript and offset notation to access elements.

Uploaded by

M Khattak
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 11

Algorithms & Computing

Lecture #10
Instructor: Jahan Zeb
Department of Computer Engineering (DCE)
College of E&ME
NUST
Calling Functions by Reference

 3 ways to pass arguments to function


– Pass-by-value
– Pass-by-reference with reference arguments
– Pass-by-reference with pointer arguments
 return can return one value from function
 Arguments passed to function using reference
arguments
– Modify original values of arguments
– More than one value “returned”
Calling Functions by Reference

 Pass-by-reference with pointer arguments


– Simulate pass-by-reference
• Use pointers and indirection operator
– Pass address of argument using & operator
– Arrays not passed with & because array name already pointer
– * operator used as alias/nickname for variable inside of
function
1
2 // Cube a variable using pass-by-value.
3 #include <iostream>
4
5 using std::cout;
6 using std::endl;
7
8 int cubeByValue( int ); // prototype
9
10 int main()
11 {
12 int number = 5;
13
14 cout << "The original value of number is " << number;
15
16 // pass number by value to cubeByValue
17 number = cubeByValue( number );
18
19 cout << "\nThe new value of number is " << number << endl;
20
21 return 0; // indicates successful termination
22
23 } // end main
24
25 // calculate and return cube of integer argument
26 int cubeByValue( int n )
27 {
28 return n * n * n; // cube local variable n and return result
29
30 } // end function cubeByValue

The original value of number is 5


The new value of number is 125
1
2 // Cube a variable using pass-by-reference
3 // with a pointer argument.
4 #include <iostream>
5
6 using std::cout;
7 using std::endl;
8
9 void cubeByReference( int * ); // prototype
10
11 int main()
12 {
13 int number = 5;
14
15 cout << "The original value of number is " << number;
16
17 // pass address of number to cubeByReference
18 cubeByReference( &number );
19
20 cout << "\nThe new value of number is " << number << endl;
21
22 return 0; // indicates successful termination
23
24 } // end main
25
26 // calculate cube of *nPtr; modifies variable number in main
27 void cubeByReference( int *nPtr )
28 {
29 *nPtr = *nPtr * *nPtr * *nPtr; // cube *nPtr
30
31 } // end function cubeByReference

The original value of number is 5


The new value of number is 125
Relationship Between Pointers and Arrays

 Arrays and pointers closely related


– Array name like constant pointer
– Pointers can do array subscripting operations
 Accessing array elements with pointers
– Element b[ n ] can be accessed by *( bPtr + n )
• Called pointer/offset notation
– Addresses
• &b[ 3 ] same as bPtr + 3
– Array name can be treated as pointer
• b[ 3 ] same as *( b + 3 )
– Pointers can be subscripted (pointer/subscript notation)
• bPtr[ 3 ] same as b[ 3 ]
1
2 // Using subscripting and pointer notations with arrays.
3
4 #include <iostream>
5
6 using std::cout;
7 using std::endl;
8
9 int main()
10 {
11 int b[] = { 10, 20, 30, 40 };
12 int *bPtr = b; // set bPtr to point to array b
13
14 // output array b using array subscript notation
15 cout << "Array b printed with:\n"
16 << "Array subscript notation\n";
17
18 for ( int i = 0; i < 4; i++ )
19 cout << "b[" << i << "] = " << b[ i ] << '\n';
20
21 // output array b using the array name and
22 // pointer/offset notation
23 cout << "\nPointer/offset notation where "
24 << "the pointer is the array name\n";
25
26 for ( int offset1 = 0; offset1 < 4; offset1++ )
27 cout << "*(b + " << offset1 << ") = "
28 << *( b + offset1 ) << '\n';
29
30 // output array b using bPtr and array subscript notation
31 cout << "\nPointer subscript notation\n";
32
33 for ( int j = 0; j < 4; j++ )
34 cout << "bPtr[" << j << "] = " << bPtr[ j ] << '\n';
35
36 cout << "\nPointer/offset notation\n";
37
38 // output array b using bPtr and pointer/offset notation
39 for ( int offset2 = 0; offset2 < 4; offset2++ )
40 cout << "*(bPtr + " << offset2 << ") = "
41 << *( bPtr + offset2 ) << '\n';
42
43 return 0; // indicates successful termination
44
45 } // end main
Array b printed with:
 
Array subscript notation
b[0] = 10
b[1] = 20
b[2] = 30
b[3] = 40
 
Pointer/offset notation where the pointer is the array name
*(b + 0) = 10
*(b + 1) = 20
*(b + 2) = 30
*(b + 3) = 40

Pointer subscript notation


bPtr[0] = 10
bPtr[1] = 20
bPtr[2] = 30
bPtr[3] = 40
 
Pointer/offset notation
*(bPtr + 0) = 10
*(bPtr + 1) = 20
*(bPtr + 2) = 30
*(bPtr + 3) = 40

You might also like