View
218
Download
0
Tags:
Embed Size (px)
Citation preview
Thursday, January 18, 2007
The question of whether computers can think is just like the question of whether
submarines can swim.
-Edsger W. Dijkstra
(1930 – 2002)
Self Test : String tokenizing: Skip multiple spaces between words.
Function to swap two numbers.
void swap(int* sa, int *sb); //prototypeint main() {
int a=3;
int b=5;
cout<<a<<" "<<b<<endl;
swap(&a, &b);cout<<a<<" "<<b<<endl;
return 0; }
void swap(int* sa, int *sb){
int temp=*sa;
*sa=*sb;
*sb=temp; }
There are three ways in C++ to pass arguments to a function:
Call by valueCall by reference with pointer
argumentsCall by reference with reference
arguments
Calling Functions
void f(int *j);
int main() {
int i=10;
int *p;
p = &i; // p now points to i
f(p);
cout << i; // i is now ?
return 0;
}
void f(int *j) { *j = 100; //pointee of j is assigned 100
}
Call Functions with pointers
void f(int *j);
int main() {
int i=10;
f(&i);
cout << i;
return 0;
}
void f(int *j) { *j = 100; //pointee of j is assigned 100
}
Call Functions with pointers
int cubeByValue(int n); // prototype
main() {
int number = 5;
cout <<"The original value of number is " << number << endl;
number = cubeByValue(number);
cout << "The new value of number is "
<< number << endl;
return 0;
}
int cubeByValue(int n){ return n * n * n; //cube local variable n
}
Functions
void cubeByReference(int *nPtr); // prototype
main() {
int number = 5;
cout << "The original value of number is " << number << endl;
cubeByReference(&number);
cout << "The new value of number is "
<< number << endl;
return 0;
}
void cubeByReference(int *nPtr)
{ // cube number in main
*nPtr = *nPtr * *nPtr * *nPtr;
}
Calling Functions with Pointers
void swap(int *pa, int *pb);//prototype
int main() {
int a=3;
int b=5;
cout<<a<<" "<<b<<endl;
swap(&a, &b);
cout<<a<<" "<<b<<endl;
return 0; }
void swap(int *pa, int *pb){
int *temp;
temp=pa;
pa=pb;
pb=temp; }
WHAT IS WRONG WITH THE FOLLOWING?
void convert(char *sPtr);
main() {
char string[] = "characters and $32.98";
cout << "The string before conversion is: " << string << endl;
convert(string);
cout << "The string after conversion is: " << string << endl;
return 0;
}
void convert(char *sPtr) {
while (*sPtr != '\0') {
if (*sPtr >= 'a' && *sPtr <= 'z')
*sPtr = toupper(*sPtr);
++sPtr; // increment sPtr to point to the next character
}}
Calling Functions with Pointers
The new operator
int *x_ptr;x_ptr=new int;
OR
int *x_ptr=new int;
//heap
Dynamic allocation
int *x_ptr=new int;*x_ptr=73;
int *x2_ptr=new int;*x2_ptr=65;
Dynamic allocation
What is wrong here?
int *x_ptr=new int;*x_ptr=73;
int *x2_ptr;*x2_ptr=65;
Dynamic allocation
int *x_ptr=new int;*x_ptr=73;
int *x2_ptr;x2_ptr=x_ptr;*x2_ptr=65;
Dynamic allocation
movie…
Dynamic allocation
//What is wrong here?
int *x_ptr=new int;*x_ptr=73;
int *x2_ptr=new int;x2_ptr=x_ptr;*x2_ptr=65;
Dynamic allocation
//What is wrong here?
int *x_ptr=new int;*x_ptr=73;
int *x2_ptr=new int;x2_ptr=x_ptr;*x2_ptr=65;
//memory leak
Dynamic allocation
int *my_ptr=new int;*my_ptr=76;cout<<*my_ptr;
delete my_ptr;
Dynamic allocation
int *my_ptr=new int;*my_ptr=76;cout<<*my_ptr;delete my_ptr;
int *my_ptr=new int(76);cout<<*my_ptr;delete my_ptr;
Dynamic allocation
Another example…
Dynamic allocation
double *p=new double[10]; /*10 element array*/
int i, size=10;for (i=0; i<size; i++){
p[i]=2.0*i;}for (i=0; i<size; i++){
cout<<p[i]<<endl; }delete []p;
Dynamic allocation