1 A Pointer: an address, a reference, a location of the computer memory A pointer of what? int, char, bool, double, or any kind of data type need to know so the computer knows how to read or store the contents of the memory. Can be
2 // define pointers int a, *ap; // can’t use a and *a at the same time; double b, *bp; token k, *kp; a is an integer, ap is a pointer to an integer; b is a double, bp is a pointer to a double; k is a token, kp s a pointer to a token. Define pointers
3 A Pointer points to a location of the computer memory int a=5; int *ap; double b=2.3; double *bp; token k; token *kp; bp = new double; *bp = 3.14; *ap = 7; // not new-ed yet a ap b bp k kp 4 bytes } ? ? FFFFA080 FFFFA
4 A Pointer points to a location of the computer memory double a=5.1; double *ap; double *b,*c; ap = &a; // &a :the address of a *ap=1.7; b = new double; *b = 3.14; b = &a; c = b; a ap b c 4 bytes } new FFFFA080 FFFFA
5 The name of an array is a pointer int a[4]={5,60,700,8000}; int *p; p=a; cout << *p << endl; cout << *p+1 << endl; cout << *(p+1) << endl; cout << *(p+2) << endl; cout << *(p+3) << endl; cout << *(p+4) << endl; apap 4 bytes } FFFFA080 FFFFA
6 Call by value double fun(int n, double p) { for (int i=0; i < 2; i++) p = p-n; return p; } npinpi int main() { int i=1,k=4; double p, s=123.4; p = fun(i+k,s); cout << i << “\n“ << k << “\n“ << p << “\n“ << s; } ikpsikps 1+4=
7 Call by reference double fun(int n, double & p) { for (int i=0;i < 2;i++) p = p-n; return p; } 5 0 npinpi int main() { int i=1,k=4; double p, s=123.4; p = fun(i+k,s); cout << i << “\n“ << k << “\n“ << p << “\n“ << s; } ikpsikps &s 1+4=
8 Call by Value vs. Call by Reference int add_one_V(int n) { n++; cout << “1:“ << n << endl; return n; } 5 n int main() { int a,b=5; a = add_one_V(b); cout << “2:“ << a << “ “ << b << endl; a = sub_one_R(b); cout << “3:“ << a << “ “ << b << endl; } 1:6 2:6 5 3:4 4 abab int sub_one_R(int & n) { n--; return n; } n &b
9 Passing Arrays as Parameters int top(int a[]) { int i=0; return a[i]; } 0 aiai int main() { int a[4]={10,200,300,400}; cout << top(a) << endl; cout << third(a) << endl; } a int third(int a[]) { int i=2; return a[i]; } 2 aiai a+2
10 Arrays passed as References void fun(int a[]) { int i=2; a[i] += 5; } 2 aiai int main() { int a[4]={10,200,300,400}; fun(a); cout << a[0] << “ “; cout << a[1] << “ “; cout << a[2] << “ “; cout << a[3] << endl; return 1; } a a[2]
11 Pass the size of an Array int main() { const int size=4; int a[size]={1,2,3,4}; add_one_to_all(a,size); for (int i=0;i<size;i++) cout << a[i] << “ “; return 1; } 4 0 size i a 1 2 void add_one_to_all(int A[], int size) { for (int i=0;i<size;i++) A[i]++; } 0 4 i A size
12 Vector passed as Value int main() { vector a(4); int i; for (i=0;i<a.size();i++) a[i]=i+1; add_one_to_all(a); for (i=0;i<a.size();i++) cout << a[i] << “ “; } iaia 1 2 void add_one_to_all(vector v) { for (int i=0;i<v.size();i++) v[i]++; } iviv
13 Vector passed as Reference int main() { vector a(4); for (int i=0;i<a.size();i++) a[i]=i+1; add_one_to_all(a); for (int i=0;i<a.size();i++) cout << a[i] << “ “; } iaia 1 2 void add_one_to_all(vector & v) { for (int i=0;i<a.size();i++) a[i]++; } 0 iviv &a
14 C-string is an array of char char *a = "Dennis"; char b[7] = {'D','e','n', 'n','i','s','\0'}; char *c=b; cout << *a << “ “ << b[0] << endl; cout << *(a+2) << “ “ << b[2] << endl; cout << a << “ “ << b << endl; char *d[2] = {c, "Li"}; cout << d[0] << " " << d[1] << endl;; abcdabcd 4 bytes } D n Dennis Dennis Li } 1 byte ‘D’ ‘e’ ‘n’ ‘i’ ‘s’ 0 ‘L’ ‘i’ d[0] d[1] ‘D’ ‘e’ ‘n’ ‘i’ ‘s’ 0