0% found this document useful (0 votes)
2 views

Lecture Slides 01 015-Arrays

The document discusses memory, data representation, and addressing in C programming, focusing on arrays and strings. It explains how arrays store adjacent data types and how pointer arithmetic can be used for indexing. Additionally, it covers the representation of C-style strings, including null-terminated strings and byte representation of data types.

Uploaded by

yihuangece
Copyright
© © All Rights Reserved
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)
2 views

Lecture Slides 01 015-Arrays

The document discusses memory, data representation, and addressing in C programming, focusing on arrays and strings. It explains how arrays store adjacent data types and how pointer arithmetic can be used for indexing. Additionally, it covers the representation of C-style strings, including null-terminated strings and byte representation of data types.

Uploaded by

yihuangece
Copyright
© © All Rights Reserved
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

University

 of  Washington  

Sec3on  1:  Memory,  Data,  and  Addressing  


¢ Preliminaries  
¢ Represen3ng  informa3on  as  bits  and  bytes  
¢ Organizing  and  addressing  data  in  memory  
¢ Manipula3ng  data  in  memory  using  C  
¢ Boolean  algebra  and  bit-­‐level  manipula3ons  

Addresses  
University  of  Washington  

Arrays  
¢ Arrays  represent  adjacent  loca3ons  in  memory  storing  the  
same  type  of  data  object  
§ e.g.,  int  big_array[128];    
allocates  512  adjacent  bytes  in  memory  star<ng  at  0x00ff0000  
¢ Pointer  arithme3c  can  be  used  for  array  indexing  in  C  (if  
pointer  and  array  have  the  same  type!):  
§ int  *array_ptr;      
array_ptr  =  big_array;      0x00ff0000  
 
array_ptr  =  &big_array[0];    0x00ff0000  
 
array_ptr  =  &big_array[3];    0x00ff000c  
 
array_ptr  =  &big_array[0]  +  3;    0x00ff000c  
  (adds  3  *  size  of  int)  
array_ptr  =  big_array  +  3;    0x00ff000c  
  (adds  3  *  size  of  int)  
*array_ptr  =  *array_ptr  +  1;    0x00ff000c  
  (but  big_array[3]  is  incremented)  
array_ptr  =  &big_array[130];    0x00ff0208  
  (out  of  bounds,  C  doesn’t  check)  
§ In  general:    &big_array[i]  is  the  same  as  (big_array  +  i),  
which  implicitly  computes:  &bigarray[0]  +  i*sizeof(bigarray[0]);  
Arrays  
University  of  Washington  

Represen3ng  strings  
¢ A  C-­‐style  string  is  represented  by  an  array  of  bytes.  
§ Elements  are  one-­‐byte  ASCII  codes  for  each  character.  
§ A  0  byte  marks  the  end  of  the  array.  
32 space 48 0 64 @ 80 P 96 ` 112 p
33 ! 49 1 65 A 81 Q 97 a 113 q
34 ” 50 2 66 B 82 R 98 b 114 r
35 # 51 3 67 C 83 S 99 c 115 s
36 $ 52 4 68 D 84 T 100 d 116 t
37 % 53 5 69 E 85 U 101 e 117 u
38 & 54 6 70 F 86 V 102 f 118 v
39 ’ 55 7 71 G 87 W 103 g 119 w
40 ( 56 8 72 H 88 X 104 h 120 x
41 ) 57 9 73 I 89 Y 105 I 121 y
42 * 58 : 74 J 90 Z 106 j 122 z
43 + 59 ; 75 K 91 [ 107 k 123 {
44 , 60 < 76 L 92 \ 108 l 124 |
45 - 61 = 77 M 93 ] 109 m 125 }
46 . 62 > 78 N 94 ^ 110 n 126 ~
47 / 63 ? 79 O 95 _ 111 o 127 del

Arrays  
University  of  Washington  

Null-­‐terminated  strings  
¢ For  example,  “Harry  PoQer”  can  be  stored  as  a  13-­‐byte  array.  
72 97 114 114 121 32 80 111 116 116 101 114 0
H a r r y P o t t e r \0

¢ Why  do  we  put  a  0,  or  null  zero,  at  the  end  of  the  string?  
§ Note  the  special  symbol:  string[12] = '\0';

¢ How  do  we  compute  the  string  length?  

Arrays  
University  of  Washington  

Compa3bility  
char S[6] = "12345";

IA32,  x86-­‐64  S   Sun  S  


31   31  
32   32  
33   33  
34   34  
35   35  
00   00  

¢ Byte  ordering  (endianness)  is  not  an  issue  for  standard  C  


strings  (char  arrays)  
¢ Unicode  characters  –  up  to  4  bytes/character  
§ ASCII  codes  s<ll  work  (just  add  leading  0  bits)  but  can  support  the  many  
characters  in  all  languages  in  the  world  
§ Java  and  C  have  libraries  for  Unicode  (Java  commonly  uses  2  bytes/char)  
Arrays  
University  of  Washington  

Examining  Data  Representa3ons  


¢ Code  to  print  byte  representa3on  of  data  
§ Any  data  type  can  be  treated  as  a  byte  array  by  cas<ng  it  to  char  

void show_bytes(char *start, int len) {


int i;
for (i = 0; i < len; i++)
printf("%p\t0x%.2x\n", start+i, *(start+i));
printf("\n");
}

void show_int (int x) {


show_bytes( (char *) &x, sizeof(int));
} prin`  direc3ves:  
 %p  Print  pointer  
 \t  Tab  
 %x  Print  value  as  hex  
 \n  New  line  
Arrays  
University  of  Washington  

show_bytes  Execu3on  Example  

int a = 12345; // represented as 0x00003039


printf("int a = 12345;\n");
show_int(a); // show_bytes( (byte *) &a, sizeof(int));

Result:!

int a = 12345;
0x7fff6f330dcc 0x39
0x7fff6f330dcd 0x30
0x7fff6f330dce 0x00
0x7fff6f330dcf 0x00

Arrays  

You might also like