0% found this document useful (0 votes)
51 views7 pages

Overview of Today's Lecture: - Pointers

Today's lecture covered pointers, structs, arrays, and strings in C. Pointers store the address of a variable rather than its value. Structs allow grouping multiple data types together. Arrays are lists of elements of the same type, and their relationship to pointers was explained. Strings are arrays of characters ending in a null terminator. Examples were provided of pointer arithmetic and passing arrays to functions by reference using pointers.

Uploaded by

Hussain NJ
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views7 pages

Overview of Today's Lecture: - Pointers

Today's lecture covered pointers, structs, arrays, and strings in C. Pointers store the address of a variable rather than its value. Structs allow grouping multiple data types together. Arrays are lists of elements of the same type, and their relationship to pointers was explained. Strings are arrays of characters ending in a null terminator. Examples were provided of pointer arithmetic and passing arrays to functions by reference using pointers.

Uploaded by

Hussain NJ
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Overview of Todays Lecture

Pointers
o Differences between value, variable, and pointer o Using pointers to do call-by-reference in C

Variables, Pointers, and Arrays


Prof. David August COS 217

Struct
o Multiple values grouped together o Dereferencing to access individual elements

Arrays
o List of elements of the same type o Relationship between arrays and pointers o Example program to reverse an array

Strings http://www.cs.princeton.edu/courses/archive/fall07/cos217/
1

o Array of characters ending in \0


2

Values, Variables, and Pointers


Value
o E.g., M memory s M x o o t p &x h y
3

Example Program
#include <stdio.h> int main(void) { char x = M; char* p = &x; printf(Value of x is %c\n, x); printf(Address of x is %u\n, p); printf(Address of p is %u\n, &p); return 0; }

Variable
o A named box that holds a value o E.g., char x = M;

Pointer value
o Address of the box o E.g., &x

Pointer variable
o A box holding the address of the box o E.g., char* p = &x;

Output
o Value of x is M o Address of x is 4290770463 o Address of p is 4290770456

Values vs. Variables


int n; n ?

Call by Value is Not Enough


Function parameters are transmitted by value
o Values copied into local variables void swap(int x, int { int t; t = x; x = y; y = t; } y)

n = 217;

217

n = n + 9;

226

No! x y a b 3 7 3 7 x y a b 7 3 3 7

3 = n; &n &3

??
a pointer value What is this? *(&n)
5

??

int main(void) { ... swap(a,b); ... }

Call by Reference Using Pointers


Use pointers to pass variables by reference
void swap(int *x, int { int t; t = *x; *x = *y; *y = t; } int main(void) { ... swap(&a,&b); ... }
7

Structures
A struct value is a bunch of values glued together struct pair { int number; char grade; 217 A

*y)

Yes

x y a b

3 7

x y a b

}; 7 3

A struct variable is a box holding a struct value struct pair x; x.number = 217; x.grade = A; x 217 A
8

Pointers to structs
struct pair {int number; char grade;}; struct pair x; x.number=217; x 217 A x.grade=A;

Dereferencing Fields
struct pair {int number; char grade;} 217 p *p 217 A n 217 A Easier-to-use notation *p;

struct pair *p; p = &x; p n 217 g A


9

int n = (*p).number; char g = (*p).grade;

int n = (*p).number; int n = p->number; char g = (*p).grade; char g = p->grade;

A
10

Arrays in C
int a[5]; a 217

Arrays and Pointers


int a[5]; int *p; 226 p = a; a p is a value of type pointer to int (int *) 226 a p 217

a is a value of type pointer to int What is a in the picture above?

is a variable of type pointer to int (int *)

OK: p = a; if (a == p)...; a[i] = p[j]; a is the pointer constant, not the five consecutive memory locations!
11

Wrong:

a = p;

3 = i;
12

C Does Not Do Bounds Checking!


int a[5]; a a[0] = 217; a[3] = 226; 226 55 217

Arrays and Pointers


int a[5]; int *p, *q; p = a; p[1]= 44; p q 226 46 a 44

217 45

a[-1] = 55; a[7] = 320;

320

q = p + 2; q[-1] = 45; q[2] = 46;


14

Unpleasant if you happened to have another variable before the array variable a, or after it! 13

Pointer Arithmetic
a int a[5]; p 226 217

Quaint usage of pointer arithmetic


Add up the elements of an array: More straightforwardly:

int a[100]; int sum, *p; ...

int a[100]; int sum, i; ... for (i=0; i<100; i++) sum += a[i];

Subscript: a[i] means *(a+i) int *p; p = a + 2;

4 bytes

for (p=a; p<a+100; p++) sum += *p;

Note: arithmetic scales by data size (e.g., int of 4 bytes) 15

16

Array Parameters to Functions


void printArray(int *p, int n) { int i; for (i=0; i<n; i++) printf(%d\n,p[i]); } int fib[5] = {1, 1, 2, 3, 5}; int main(void) {

Array Params Pointer Params


void printArray(int *p, int n) { ... } void printArray(int p[5], int n) { ... } void printArray(int p[ ], int n) { ... } void printArray(int p[1000], int n) { ... } All these declarations are equivalent!

int main(void) { printArray(fib, 5); }


17

printArray(fib, 5); }
18

Example Program: Reverse Array


Reverse the values in an array
o Inputs: integer array a, and number of elements n o Output: values of a stored in reverse order

Example of Array by Reference


void reverse (int a[], int n) { int l, r, temp; for (l=0, r=n-1; l<r; l++, r--) { temp = a[l]; a[l] = a[r]; a[r] = temp; } } int main(void) { reverse(fib, 5); }

Algorithm
o Swap the first and last elements in the array o Swap the second and second-to-last elements o

77

31

94

186

19

20

Strings
A string is just an array of characters (pointer to character), terminated by a \0 char (a null, ASCII code 0).

Char Array and Pointer Manipulation


char mystring[] = Hello; char *yourstring = Hello; yourstring Equivalent mystring[0] = J; yourstring[0] = C; yourstring = mystring; J y mystring H e l l o \0 C H e l l o \0

char mystring[6] = {H,e,l,l,o,\0}; char mystring[6] = Hello; char mystring[] = Hello; mystring H e l l o \0 char *yourstring = Hello; yourstring Different H e l l o \0
21

yourstring[4] = y; mystring = yourstring;


22

Printing a String
printf(%s,mystring); mystring H e l l o \0 int i; for (i=0; mystring[i]; i++) putchar(mystring[i]);

String termination
char mystring[] = Hello; x l ! mystring H e \0 l o \0 mystring[2] = 0;
equivalently, mystring[2]=\0;

printf(%s\n,mystring); He mystring[2] = x; mystring[5] = !;

or, char *p; for (p=mystring; *p; p++) putchar(*p);


23

printf(%s\n,mystring); What will happen?

24

Boxes and Arrows


In designing and analyzing your data structures, draw pictures! Example: you want an array of strings
NULL

Summary of Todays Class


C variables
o o o o Pointer Struct Array String

z e r o \0 o n e \0 t w o \0

Readings
o See Course Schedule on Web page!

char *query[4] = {zero,one,two,NULL};


how to parse it:

*(query[4])
25 26

postfix operators bind tighter than prefix; whenever youre not sure, just put the parentheses in

You might also like