one-dimensional arrays and strings: chapter 6, slide 1 the concept of array - an extension of the...
TRANSCRIPT
![Page 1: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/1.jpg)
One-dimensional arrays and strings:
Chapter 6, Slide 1
itemwith
index 0
itemwith
index 1
itemwith
index 2
itemwith
index 3
The concept of array - an extension of the basic model of memory:
![Page 2: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/2.jpg)
Chapter 6, Slide 2
Accessing one-dimensional array via a pointer:
itemwith
index 0*p
itemwith
index 1*(p+1)
itemwith
index 2*(p+2)
itemwith
index 3*(p+3)
p
![Page 3: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/3.jpg)
Chapter 6, Slide 3
constint* x x[0]
*(x+0)x[1]
*(x+1)x[2]
*(x+2)x[3]
*(x+3)x[4]
*(x+4)x[5]
*(x+5)
Representation of the int x[6] array:
• The size of the array is “forgotten” (after passing it to a function), no index range run-time testing is possible.
• Arrays passed by reference, as the pointer representing it is passed by value.
![Page 4: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/4.jpg)
Chapter 6, Slide 5
void doit(int y[]){ y[0] = 0; y[1] = 1;}
int main(){ int i; int x[6]={10,11,12,13,14,15};
doit(x); for(i = 0; i < 6; i++) printf("%d ",x[i]); putchar('\n'); return 0;}
![Page 5: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/5.jpg)
Chapter 6, Slide 6
80804048
int* x x[0]y[0]
0 1 12 13 14 15
x[1]y[1]
x[2] x[3] x[4] x[5]
address80804048
address80804052
address80804056
address80804060
address80804064
address80804070
doit() activation frame
80804048
int* y
The program displays: 0 1 12 13 14 15
![Page 6: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/6.jpg)
Chapter 6, Slide 7
Dynamic one-dimensional arrays is simple:
int main(){ int i; int* x; x = malloc(6*sizeof(int)); if (x == NULL) exit(1);
x[0] = 10; x[1] = 11; x[2] = 12; x[3] = 13; x[4] = 14; x[5] = 15;
![Page 7: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/7.jpg)
Chapter 6, Slide 7
for(i = 0; i < 6; i++) printf("%d ",x[i]); putchar('\n');
return 0;}
Strings are char arrays terminated by NULL '\0'
Thus a string can be stored in a static array:
char x[30] = "hello";or char x[30]; strcpy(x,"hello");
![Page 8: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/8.jpg)
Chapter 6, Slide 8
as well as in a dynamic array
char* x;x = malloc(30);strcpy(x,"hello");
Thus a string is represented by a pointer and passed by reference.
char* strcpy(char* dest,const char* src){ char *dest1 = dest; while((*dest++=*src++) != NULL); return dest1;}
![Page 9: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/9.jpg)
Chapter 6, Slide 9
Missing NULL could spell big troubles (see overflows).
Not allocating memory for a string is the most common error (leading to erratic behaviour):
int main(){ char* p; strcpy(p,"hello"); return 0;}
Insufficient memory could spell troubles (overflows):
p = malloc(5); strcpy(p,"hello");
![Page 10: One-dimensional arrays and strings: Chapter 6, Slide 1 The concept of array - an extension of the basic model of memory:](https://reader036.vdocuments.net/reader036/viewer/2022083009/5697c01d1a28abf838cd0b53/html5/thumbnails/10.jpg)
Chapter 6, Slide 10
In C++ we can overload operator [] and create “arrays” with range checking: chapter6_1
End of slides for chapter 6