SlideShare a Scribd company logo
Arrays and Pointers in C
Alan L. Cox
alc@rice.edu
Objectives
Be able to use arrays, pointers, and strings in
C programs
Be able to explain the representation of these
data types at the machine level, including
their similarities and differences
Cox Arrays and Pointers 2
Cox Arrays and Pointers 3
Arrays in C
No bounds checking!
Allowed – usually causes no obvious error
array[10] may overwrite b
Unlike Java, array size in declaration
int array[10];
int b;
array[0] = 3;
array[9] = 4;
array[10] = 5;
array[-1] = 6;
Compare: C: int array[10];
Java: int[] array = new int[10];
All elements of same type – homogenous
First element (index 0)
Last element (index size - 1)
Cox Arrays and Pointers 4
Array Representation
Homogeneous  Each element same size – s bytes
 An array of m data values is a sequence of ms bytes
 Indexing: 0th value at byte s0, 1st value at byte s1, …
m and s are not part of representation
 Unlike in some other languages
 s known by compiler – usually irrelevant to programmer
 m often known by compiler – if not, must be saved by
programmer
a[0]
a[1]
a[2]
0x1000
0x1004
0x1008
int a[3];
Cox Arrays and Pointers 5
Array Representation
char c1;
int a[3];
char c2;
int i;
c1
a[0]
a[1]
a[2]
i
0x1000
0x1004
0x1008
0x100C
0x1014
c2
0x1010
Could be optimized by
making these adjacent,
and reducing padding
(by default, not)
Array aligned by
size of elements
Cox Arrays and Pointers 6
Array Sizes
What is
sizeof(array[3])?
sizeof(array)?
int array[10];
4
40
returns the size of
an object in bytes
Cox Arrays and Pointers 7
Multi-Dimensional Arrays
int matrix[2][3];
matrix[1][0] = 17;
matrix[0][0]
matrix[0][1]
matrix[0][2]
0x1000
0x1004
0x1008
matrix[1][0]
matrix[1][1]
matrix[1][2]
0x100C
0x1010
0x1014
Recall: no bounds checking
What happens when you write:
matrix[0][3] = 42;
“Row Major”
Organization
Cox Arrays and Pointers 8
Variable-Length Arrays
int
function(int n)
{
int array[n];
…
New C99 feature: Variable-length arrays
defined within functions
Global arrays must still have fixed (constant) length
Cox Arrays and Pointers 9
Memory Addresses
Storage cells are typically viewed as being
byte-sized
 Usually the smallest addressable unit of memory
• Few machines can directly address bits individually
 Such addresses are sometimes called byte-
addresses
Memory is often accessed as words
 Usually a word is the largest unit of memory access
by a single machine instruction
• CLEAR’s word size is 8 bytes (= sizeof(long))
 A word-address is simply the byte-address of the
word’s first byte
Cox Arrays and Pointers 10
Pointers
Special case of bounded-size natural numbers
 Maximum memory limited by processor word-size
 232 bytes = 4GB, 264 bytes = 16 exabytes
A pointer is just another kind of value
 A basic type in C
int *ptr;
The variable “ptr” stores a pointer to an “int”.
Cox Arrays and Pointers 11
Pointer Operations in C
Creation
& variable Returns variable’s memory address
Dereference
* pointer Returns contents stored at address
Indirect assignment
* pointer = val Stores value at address
Of course, still have...
Assignment
pointer = ptr Stores pointer in another variable
Cox Arrays and Pointers 12
Using Pointers
int i1;
int i2;
int *ptr1;
int *ptr2;
i1 = 1;
i2 = 2;
ptr1 = &i1;
ptr2 = ptr1;
*ptr1 = 3;
i2 = *ptr2;
i1:
i2:
ptr1:
0x1000
0x1004
0x1008
…
ptr2:
…
0x100C
0x1010
0x1014
1
2
0x1000
0x1000
3
3
Cox Arrays and Pointers 13
Using Pointers (cont.)
Type check warning: int_ptr2 is not an int
int1 becomes 8
int int1 = 1036; /* some data to point to */
int int2 = 8;
int *int_ptr1 = &int1; /* get addresses of data */
int *int_ptr2 = &int2;
*int_ptr1 = int_ptr2;
*int_ptr1 = int2;
What happens?
Cox Arrays and Pointers 14
Using Pointers (cont.)
Type check warning: *int_ptr2 is not an int *
Changes int_ptr1 – doesn’t change int1
int int1 = 1036; /* some data to point to */
int int2 = 8;
int *int_ptr1 = &int1; /* get addresses of data */
int *int_ptr2 = &int2;
int_ptr1 = *int_ptr2;
int_ptr1 = int_ptr2;
What happens?
Cox Arrays and Pointers 15
Pointer Arithmetic
pointer + number pointer – number
E.g., pointer + 1 adds 1 something to a pointer
char *p;
char a;
char b;
p = &a;
p += 1;
int *p;
int a;
int b;
p = &a;
p += 1;
In each, p now points to b
(Assuming compiler doesn’t
reorder variables in memory)
Adds 1*sizeof(char) to
the memory address
Adds 1*sizeof(int) to
the memory address
Pointer arithmetic should be used cautiously
Cox Arrays and Pointers 16
A Special Pointer in C
Special constant pointer NULL
 Points to no data
 Dereferencing illegal – causes segmentation fault
 To define, include <stdlib.h> or <stdio.h>
Cox Arrays and Pointers 17
Generic Pointers
void *: a “pointer to anything”
Lose all information about what type of thing
is pointed to
 Reduces effectiveness of compiler’s type-checking
 Can’t use pointer arithmetic
void *p;
int i;
char c;
p = &i;
p = &c;
putchar(*(char *)p);
type cast: tells the compiler to
“change” an object’s type (for type
checking purposes – does not modify
the object in any way)
Dangerous! Sometimes necessary…
Cox Arrays and Pointers 18
Pass-by-Reference
void
set_x_and_y(int *x, int *y)
{
*x = 1001;
*y = 1002;
}
void
f(void)
{
int a = 1;
int b = 2;
set_x_and_y(&a, &b);
}
1
2
a
b
x
y
1001
1002
Cox Arrays and Pointers 19
Arrays and Pointers
Dirty “secret”:
Array name  a pointer to the
initial (0th) array element
a[i]  *(a + i)
An array is passed to a function
as a pointer
 The array size is lost!
Usually bad style to interchange
arrays and pointers
 Avoid pointer arithmetic!
Really int *array
int
foo(int array[],
unsigned int size)
{
… array[size - 1] …
}
int
main(void)
{
int a[10], b[5];
… foo(a, 10)… foo(b, 5) …
}
Must explicitly
pass the size
Passing arrays:
Cox Arrays and Pointers 20
Arrays and Pointers
int
foo(int array[],
unsigned int size)
{
…
printf(“%dn”, sizeof(array));
}
int
main(void)
{
int a[10], b[5];
… foo(a, 10)… foo(b, 5) …
printf(“%dn”, sizeof(a));
}
What does this print?
What does this print?
8
40
... because array is really
a pointer
Cox Arrays and Pointers 21
Arrays and Pointers
int i;
int array[10];
for (i = 0; i < 10; i++) {
…
array[i] = …;
…
}
int *p;
int array[10];
for (p = array; p < &array[10]; p++) {
…
*p = …;
…
}
These two blocks of code are functionally equivalent
Cox Arrays and Pointers 22
Strings
In C, strings are just an array of characters
 Terminated with ‘0’ character
 Arrays for bounded-length strings
 Pointer for constant strings (or unknown length)
char str1[15] = “Hello, world!n”;
char *str2 = “Hello, world!n”;
H e l l o , w l
o r d !n
length
H e l l o , w l
o r d !nterminator
Pascal, Java, …
C, …
C terminator: ’0’
Cox Arrays and Pointers 23
String length
Must calculate length:
Provided by standard C library: #include <string.h>
int
strlen(char str[])
{
int len = 0;
while (str[len] != ‘0’)
len++;
return (len);
}
can pass an
array or pointer
Check for
terminator
array access
to pointer!
What is the size
of the array???
Pointer to Pointer (char **argv)
Cox Arrays and Pointers 24
Passing arguments to main:
int
main(int argc, char **argv)
{
...
}
an array/vector of
char *
Recall when passing an
array, a pointer to the
first element is passed
size of the argv array/vector
Suppose you run the program this way
UNIX% ./program hello 1 2 3
argc == 5 (five strings on the
command line)
Cox Arrays and Pointers 25
char **argv
argv[0]
argv[1]
argv[2]
0x1000
0x1008
0x1010
argv[3]
argv[4]
0x1018
0x1020
“./program”
“hello”
“1”
“2”
“3”
These are strings!!
Not integers!
Cox Arrays and Pointers 26
Next Time
Structures and Unions

More Related Content

Similar to 03-arrays-pointers (1).ppt

ch08.ppt
ch08.pptch08.ppt
ch08.ppt
NewsMogul
 
Pointers in C
Pointers in CPointers in C
Pointers in C
Vijayananda Ratnam Ch
 
C- language Lecture 5
C- language Lecture 5C- language Lecture 5
C- language Lecture 5
Hatem Abd El-Salam
 
Pointer
PointerPointer
Pointer
Fahuda E
 
Pointer in C
Pointer in CPointer in C
Pointer in C
bipchulabmki
 
Pointers and Dynamic Memory Allocation
Pointers and Dynamic Memory AllocationPointers and Dynamic Memory Allocation
Pointers and Dynamic Memory Allocation
Rabin BK
 
Csc1100 lecture12 ch08_pt2
Csc1100 lecture12 ch08_pt2Csc1100 lecture12 ch08_pt2
Csc1100 lecture12 ch08_pt2IIUM
 
Clanguage
ClanguageClanguage
Clanguage
Vidyacenter
 
Chapter 5 (Part I) - Pointers.pdf
Chapter 5 (Part I) - Pointers.pdfChapter 5 (Part I) - Pointers.pdf
Chapter 5 (Part I) - Pointers.pdf
TamiratDejene1
 
Engineering Computers L32-L33-Pointers.pptx
Engineering Computers L32-L33-Pointers.pptxEngineering Computers L32-L33-Pointers.pptx
Engineering Computers L32-L33-Pointers.pptx
happycocoman
 
ESC112 Course lecture slides on pointers and memory allocation.pptx
ESC112 Course lecture slides on pointers and memory allocation.pptxESC112 Course lecture slides on pointers and memory allocation.pptx
ESC112 Course lecture slides on pointers and memory allocation.pptx
krishna50blogging
 
Theory1&amp;2
Theory1&amp;2Theory1&amp;2
COM1407: Working with Pointers
COM1407: Working with PointersCOM1407: Working with Pointers
COM1407: Working with Pointers
Hemantha Kulathilake
 
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdfEASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
sudhakargeruganti
 
Pointer in C++
Pointer in C++Pointer in C++
Pointer in C++
Mauryasuraj98
 
Lecture 5Arrays on c++ for Beginner.pptx
Lecture 5Arrays on c++ for Beginner.pptxLecture 5Arrays on c++ for Beginner.pptx
Lecture 5Arrays on c++ for Beginner.pptx
arjurakibulhasanrrr7
 
Pointers
PointersPointers
Pointers
Lp Singh
 
The best every notes on c language is here check it out
The best every notes on c language is here check it outThe best every notes on c language is here check it out
The best every notes on c language is here check it out
rajatryadav22
 

Similar to 03-arrays-pointers (1).ppt (20)

ch08.ppt
ch08.pptch08.ppt
ch08.ppt
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
C- language Lecture 5
C- language Lecture 5C- language Lecture 5
C- language Lecture 5
 
Pointers+(2)
Pointers+(2)Pointers+(2)
Pointers+(2)
 
Pointer
PointerPointer
Pointer
 
Pointer in C
Pointer in CPointer in C
Pointer in C
 
Pointers and Dynamic Memory Allocation
Pointers and Dynamic Memory AllocationPointers and Dynamic Memory Allocation
Pointers and Dynamic Memory Allocation
 
Csc1100 lecture12 ch08_pt2
Csc1100 lecture12 ch08_pt2Csc1100 lecture12 ch08_pt2
Csc1100 lecture12 ch08_pt2
 
Clanguage
ClanguageClanguage
Clanguage
 
Chapter 5 (Part I) - Pointers.pdf
Chapter 5 (Part I) - Pointers.pdfChapter 5 (Part I) - Pointers.pdf
Chapter 5 (Part I) - Pointers.pdf
 
Engineering Computers L32-L33-Pointers.pptx
Engineering Computers L32-L33-Pointers.pptxEngineering Computers L32-L33-Pointers.pptx
Engineering Computers L32-L33-Pointers.pptx
 
Antlr V3
Antlr V3Antlr V3
Antlr V3
 
ESC112 Course lecture slides on pointers and memory allocation.pptx
ESC112 Course lecture slides on pointers and memory allocation.pptxESC112 Course lecture slides on pointers and memory allocation.pptx
ESC112 Course lecture slides on pointers and memory allocation.pptx
 
Theory1&amp;2
Theory1&amp;2Theory1&amp;2
Theory1&amp;2
 
COM1407: Working with Pointers
COM1407: Working with PointersCOM1407: Working with Pointers
COM1407: Working with Pointers
 
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdfEASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
 
Pointer in C++
Pointer in C++Pointer in C++
Pointer in C++
 
Lecture 5Arrays on c++ for Beginner.pptx
Lecture 5Arrays on c++ for Beginner.pptxLecture 5Arrays on c++ for Beginner.pptx
Lecture 5Arrays on c++ for Beginner.pptx
 
Pointers
PointersPointers
Pointers
 
The best every notes on c language is here check it out
The best every notes on c language is here check it outThe best every notes on c language is here check it out
The best every notes on c language is here check it out
 

More from SyedaNooreen

Types of friends and mentioned in quran
Types of friends and  mentioned in quranTypes of friends and  mentioned in quran
Types of friends and mentioned in quran
SyedaNooreen
 
Presentation8 testing making pptx from scratch
Presentation8 testing making pptx from scratchPresentation8 testing making pptx from scratch
Presentation8 testing making pptx from scratch
SyedaNooreen
 
khandaq lessons learned from prophets life
khandaq lessons learned from prophets lifekhandaq lessons learned from prophets life
khandaq lessons learned from prophets life
SyedaNooreen
 
knowrasooldua.pptx
knowrasooldua.pptxknowrasooldua.pptx
knowrasooldua.pptx
SyedaNooreen
 
surahtaubahshumaila.pptx
surahtaubahshumaila.pptxsurahtaubahshumaila.pptx
surahtaubahshumaila.pptx
SyedaNooreen
 
duaofibrahimas.pptx
duaofibrahimas.pptxduaofibrahimas.pptx
duaofibrahimas.pptx
SyedaNooreen
 
araaf.pptx
araaf.pptxaraaf.pptx
araaf.pptx
SyedaNooreen
 

More from SyedaNooreen (7)

Types of friends and mentioned in quran
Types of friends and  mentioned in quranTypes of friends and  mentioned in quran
Types of friends and mentioned in quran
 
Presentation8 testing making pptx from scratch
Presentation8 testing making pptx from scratchPresentation8 testing making pptx from scratch
Presentation8 testing making pptx from scratch
 
khandaq lessons learned from prophets life
khandaq lessons learned from prophets lifekhandaq lessons learned from prophets life
khandaq lessons learned from prophets life
 
knowrasooldua.pptx
knowrasooldua.pptxknowrasooldua.pptx
knowrasooldua.pptx
 
surahtaubahshumaila.pptx
surahtaubahshumaila.pptxsurahtaubahshumaila.pptx
surahtaubahshumaila.pptx
 
duaofibrahimas.pptx
duaofibrahimas.pptxduaofibrahimas.pptx
duaofibrahimas.pptx
 
araaf.pptx
araaf.pptxaraaf.pptx
araaf.pptx
 

Recently uploaded

MARUTI SUZUKI- A Successful Joint Venture in India.pptx
MARUTI SUZUKI- A Successful Joint Venture in India.pptxMARUTI SUZUKI- A Successful Joint Venture in India.pptx
MARUTI SUZUKI- A Successful Joint Venture in India.pptx
bennyroshan06
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
Nguyen Thanh Tu Collection
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
Jisc
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
Mohd Adib Abd Muin, Senior Lecturer at Universiti Utara Malaysia
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
Sandy Millin
 
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdf
Welcome to TechSoup   New Member Orientation and Q&A (May 2024).pdfWelcome to TechSoup   New Member Orientation and Q&A (May 2024).pdf
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdf
TechSoup
 
Introduction to Quality Improvement Essentials
Introduction to Quality Improvement EssentialsIntroduction to Quality Improvement Essentials
Introduction to Quality Improvement Essentials
Excellence Foundation for South Sudan
 
Model Attribute Check Company Auto Property
Model Attribute  Check Company Auto PropertyModel Attribute  Check Company Auto Property
Model Attribute Check Company Auto Property
Celine George
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
Pavel ( NSTU)
 
Basic phrases for greeting and assisting costumers
Basic phrases for greeting and assisting costumersBasic phrases for greeting and assisting costumers
Basic phrases for greeting and assisting costumers
PedroFerreira53928
 
The geography of Taylor Swift - some ideas
The geography of Taylor Swift - some ideasThe geography of Taylor Swift - some ideas
The geography of Taylor Swift - some ideas
GeoBlogs
 
How to Break the cycle of negative Thoughts
How to Break the cycle of negative ThoughtsHow to Break the cycle of negative Thoughts
How to Break the cycle of negative Thoughts
Col Mukteshwar Prasad
 
Polish students' mobility in the Czech Republic
Polish students' mobility in the Czech RepublicPolish students' mobility in the Czech Republic
Polish students' mobility in the Czech Republic
Anna Sz.
 
The Roman Empire A Historical Colossus.pdf
The Roman Empire A Historical Colossus.pdfThe Roman Empire A Historical Colossus.pdf
The Roman Empire A Historical Colossus.pdf
kaushalkr1407
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
Jisc
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
siemaillard
 
TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
EugeneSaldivar
 
The Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official PublicationThe Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official Publication
Delapenabediema
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
Special education needs
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
siemaillard
 

Recently uploaded (20)

MARUTI SUZUKI- A Successful Joint Venture in India.pptx
MARUTI SUZUKI- A Successful Joint Venture in India.pptxMARUTI SUZUKI- A Successful Joint Venture in India.pptx
MARUTI SUZUKI- A Successful Joint Venture in India.pptx
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI BUỔI 2) - TIẾNG ANH 8 GLOBAL SUCCESS (2 CỘT) N...
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...2024.06.01 Introducing a competency framework for languag learning materials ...
2024.06.01 Introducing a competency framework for languag learning materials ...
 
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdf
Welcome to TechSoup   New Member Orientation and Q&A (May 2024).pdfWelcome to TechSoup   New Member Orientation and Q&A (May 2024).pdf
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdf
 
Introduction to Quality Improvement Essentials
Introduction to Quality Improvement EssentialsIntroduction to Quality Improvement Essentials
Introduction to Quality Improvement Essentials
 
Model Attribute Check Company Auto Property
Model Attribute  Check Company Auto PropertyModel Attribute  Check Company Auto Property
Model Attribute Check Company Auto Property
 
Synthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptxSynthetic Fiber Construction in lab .pptx
Synthetic Fiber Construction in lab .pptx
 
Basic phrases for greeting and assisting costumers
Basic phrases for greeting and assisting costumersBasic phrases for greeting and assisting costumers
Basic phrases for greeting and assisting costumers
 
The geography of Taylor Swift - some ideas
The geography of Taylor Swift - some ideasThe geography of Taylor Swift - some ideas
The geography of Taylor Swift - some ideas
 
How to Break the cycle of negative Thoughts
How to Break the cycle of negative ThoughtsHow to Break the cycle of negative Thoughts
How to Break the cycle of negative Thoughts
 
Polish students' mobility in the Czech Republic
Polish students' mobility in the Czech RepublicPolish students' mobility in the Czech Republic
Polish students' mobility in the Czech Republic
 
The Roman Empire A Historical Colossus.pdf
The Roman Empire A Historical Colossus.pdfThe Roman Empire A Historical Colossus.pdf
The Roman Empire A Historical Colossus.pdf
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...TESDA TM1 REVIEWER  FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
TESDA TM1 REVIEWER FOR NATIONAL ASSESSMENT WRITTEN AND ORAL QUESTIONS WITH A...
 
The Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official PublicationThe Challenger.pdf DNHS Official Publication
The Challenger.pdf DNHS Official Publication
 
special B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdfspecial B.ed 2nd year old paper_20240531.pdf
special B.ed 2nd year old paper_20240531.pdf
 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 

03-arrays-pointers (1).ppt

  • 1. Arrays and Pointers in C Alan L. Cox alc@rice.edu
  • 2. Objectives Be able to use arrays, pointers, and strings in C programs Be able to explain the representation of these data types at the machine level, including their similarities and differences Cox Arrays and Pointers 2
  • 3. Cox Arrays and Pointers 3 Arrays in C No bounds checking! Allowed – usually causes no obvious error array[10] may overwrite b Unlike Java, array size in declaration int array[10]; int b; array[0] = 3; array[9] = 4; array[10] = 5; array[-1] = 6; Compare: C: int array[10]; Java: int[] array = new int[10]; All elements of same type – homogenous First element (index 0) Last element (index size - 1)
  • 4. Cox Arrays and Pointers 4 Array Representation Homogeneous  Each element same size – s bytes  An array of m data values is a sequence of ms bytes  Indexing: 0th value at byte s0, 1st value at byte s1, … m and s are not part of representation  Unlike in some other languages  s known by compiler – usually irrelevant to programmer  m often known by compiler – if not, must be saved by programmer a[0] a[1] a[2] 0x1000 0x1004 0x1008 int a[3];
  • 5. Cox Arrays and Pointers 5 Array Representation char c1; int a[3]; char c2; int i; c1 a[0] a[1] a[2] i 0x1000 0x1004 0x1008 0x100C 0x1014 c2 0x1010 Could be optimized by making these adjacent, and reducing padding (by default, not) Array aligned by size of elements
  • 6. Cox Arrays and Pointers 6 Array Sizes What is sizeof(array[3])? sizeof(array)? int array[10]; 4 40 returns the size of an object in bytes
  • 7. Cox Arrays and Pointers 7 Multi-Dimensional Arrays int matrix[2][3]; matrix[1][0] = 17; matrix[0][0] matrix[0][1] matrix[0][2] 0x1000 0x1004 0x1008 matrix[1][0] matrix[1][1] matrix[1][2] 0x100C 0x1010 0x1014 Recall: no bounds checking What happens when you write: matrix[0][3] = 42; “Row Major” Organization
  • 8. Cox Arrays and Pointers 8 Variable-Length Arrays int function(int n) { int array[n]; … New C99 feature: Variable-length arrays defined within functions Global arrays must still have fixed (constant) length
  • 9. Cox Arrays and Pointers 9 Memory Addresses Storage cells are typically viewed as being byte-sized  Usually the smallest addressable unit of memory • Few machines can directly address bits individually  Such addresses are sometimes called byte- addresses Memory is often accessed as words  Usually a word is the largest unit of memory access by a single machine instruction • CLEAR’s word size is 8 bytes (= sizeof(long))  A word-address is simply the byte-address of the word’s first byte
  • 10. Cox Arrays and Pointers 10 Pointers Special case of bounded-size natural numbers  Maximum memory limited by processor word-size  232 bytes = 4GB, 264 bytes = 16 exabytes A pointer is just another kind of value  A basic type in C int *ptr; The variable “ptr” stores a pointer to an “int”.
  • 11. Cox Arrays and Pointers 11 Pointer Operations in C Creation & variable Returns variable’s memory address Dereference * pointer Returns contents stored at address Indirect assignment * pointer = val Stores value at address Of course, still have... Assignment pointer = ptr Stores pointer in another variable
  • 12. Cox Arrays and Pointers 12 Using Pointers int i1; int i2; int *ptr1; int *ptr2; i1 = 1; i2 = 2; ptr1 = &i1; ptr2 = ptr1; *ptr1 = 3; i2 = *ptr2; i1: i2: ptr1: 0x1000 0x1004 0x1008 … ptr2: … 0x100C 0x1010 0x1014 1 2 0x1000 0x1000 3 3
  • 13. Cox Arrays and Pointers 13 Using Pointers (cont.) Type check warning: int_ptr2 is not an int int1 becomes 8 int int1 = 1036; /* some data to point to */ int int2 = 8; int *int_ptr1 = &int1; /* get addresses of data */ int *int_ptr2 = &int2; *int_ptr1 = int_ptr2; *int_ptr1 = int2; What happens?
  • 14. Cox Arrays and Pointers 14 Using Pointers (cont.) Type check warning: *int_ptr2 is not an int * Changes int_ptr1 – doesn’t change int1 int int1 = 1036; /* some data to point to */ int int2 = 8; int *int_ptr1 = &int1; /* get addresses of data */ int *int_ptr2 = &int2; int_ptr1 = *int_ptr2; int_ptr1 = int_ptr2; What happens?
  • 15. Cox Arrays and Pointers 15 Pointer Arithmetic pointer + number pointer – number E.g., pointer + 1 adds 1 something to a pointer char *p; char a; char b; p = &a; p += 1; int *p; int a; int b; p = &a; p += 1; In each, p now points to b (Assuming compiler doesn’t reorder variables in memory) Adds 1*sizeof(char) to the memory address Adds 1*sizeof(int) to the memory address Pointer arithmetic should be used cautiously
  • 16. Cox Arrays and Pointers 16 A Special Pointer in C Special constant pointer NULL  Points to no data  Dereferencing illegal – causes segmentation fault  To define, include <stdlib.h> or <stdio.h>
  • 17. Cox Arrays and Pointers 17 Generic Pointers void *: a “pointer to anything” Lose all information about what type of thing is pointed to  Reduces effectiveness of compiler’s type-checking  Can’t use pointer arithmetic void *p; int i; char c; p = &i; p = &c; putchar(*(char *)p); type cast: tells the compiler to “change” an object’s type (for type checking purposes – does not modify the object in any way) Dangerous! Sometimes necessary…
  • 18. Cox Arrays and Pointers 18 Pass-by-Reference void set_x_and_y(int *x, int *y) { *x = 1001; *y = 1002; } void f(void) { int a = 1; int b = 2; set_x_and_y(&a, &b); } 1 2 a b x y 1001 1002
  • 19. Cox Arrays and Pointers 19 Arrays and Pointers Dirty “secret”: Array name  a pointer to the initial (0th) array element a[i]  *(a + i) An array is passed to a function as a pointer  The array size is lost! Usually bad style to interchange arrays and pointers  Avoid pointer arithmetic! Really int *array int foo(int array[], unsigned int size) { … array[size - 1] … } int main(void) { int a[10], b[5]; … foo(a, 10)… foo(b, 5) … } Must explicitly pass the size Passing arrays:
  • 20. Cox Arrays and Pointers 20 Arrays and Pointers int foo(int array[], unsigned int size) { … printf(“%dn”, sizeof(array)); } int main(void) { int a[10], b[5]; … foo(a, 10)… foo(b, 5) … printf(“%dn”, sizeof(a)); } What does this print? What does this print? 8 40 ... because array is really a pointer
  • 21. Cox Arrays and Pointers 21 Arrays and Pointers int i; int array[10]; for (i = 0; i < 10; i++) { … array[i] = …; … } int *p; int array[10]; for (p = array; p < &array[10]; p++) { … *p = …; … } These two blocks of code are functionally equivalent
  • 22. Cox Arrays and Pointers 22 Strings In C, strings are just an array of characters  Terminated with ‘0’ character  Arrays for bounded-length strings  Pointer for constant strings (or unknown length) char str1[15] = “Hello, world!n”; char *str2 = “Hello, world!n”; H e l l o , w l o r d !n length H e l l o , w l o r d !nterminator Pascal, Java, … C, … C terminator: ’0’
  • 23. Cox Arrays and Pointers 23 String length Must calculate length: Provided by standard C library: #include <string.h> int strlen(char str[]) { int len = 0; while (str[len] != ‘0’) len++; return (len); } can pass an array or pointer Check for terminator array access to pointer! What is the size of the array???
  • 24. Pointer to Pointer (char **argv) Cox Arrays and Pointers 24 Passing arguments to main: int main(int argc, char **argv) { ... } an array/vector of char * Recall when passing an array, a pointer to the first element is passed size of the argv array/vector Suppose you run the program this way UNIX% ./program hello 1 2 3 argc == 5 (five strings on the command line)
  • 25. Cox Arrays and Pointers 25 char **argv argv[0] argv[1] argv[2] 0x1000 0x1008 0x1010 argv[3] argv[4] 0x1018 0x1020 “./program” “hello” “1” “2” “3” These are strings!! Not integers!
  • 26. Cox Arrays and Pointers 26 Next Time Structures and Unions