Dale Roberts, Lecturer - PowerPoint PPT Presentation

1 / 14
About This Presentation
Title:

Dale Roberts, Lecturer

Description:

It is not a good idea to pass a structure to or return from function. ... const char *face[] = {'Ace', 'Deuce', 'Three', 'Four', 'Five', 'Six', Seven' ... – PowerPoint PPT presentation

Number of Views:25
Avg rating:3.0/5.0
Slides: 15
Provided by: Jeffre
Learn more at: http://www.cs.iupui.edu
Category:
Tags: dale | deuce | lecturer | roberts

less

Transcript and Presenter's Notes

Title: Dale Roberts, Lecturer


1
Department of Computer and Information
Science,School of Science, IUPUI
CSCI 230
Structures Functions and Arrays
  • Dale Roberts, Lecturer
  • Computer Science, IUPUI
  • E-mail droberts_at_cs.iupui.edu

2
Using Structures With Functions
  • Passing structures to functions
  • Pass entire structure or pass individual members
  • Both pass call by value
  • It is not a good idea to pass a structure to or
    return from function.The better way is passing a
    pointer to the structure to the functions and
    returning a pointer from function.
  • To pass structures call-by-reference
  • Pass its address
  • Pass reference to it
  • To pass arrays call-by-value
  • Create a structure with the array as a member
  • Pass the structure

3
Using Structures With Functions (cont.)
  • Example
  • day_of_year(struct date pd)
  • int i, day, leap
  • day pd -gt day
  • leap pd-gtyear4 0 pd-gtyear 100 0
    pd-gtyear400 0
  • for (i1 i lt pd -gt month i)
  • day day_tableapi
  • return (day)
  • The declaration struct date pd
  • says that pd is a pointer to a structure of the
    type date
  • If p is a pointer to a structure, then p-gt
    member_of_structure refers to the particular
    members, like pd -gt year
  • p-gt member_of_structure is equivalent to
    (p).member_of_structure
  • Notice . has higher precedence than
    pd.year is wrong, since pd.year is not a
    pointer.
  • Both -gt and . associate from left to right. So
    p -gt q -gt member
  • are (p-gtq)-gtmember.
  • Example emp.birthday.month are
    (emp.birthday).month

4
Using Structures With Functions (cont.)
  • -gt and . both are at the highest precedence
    (together with () for function and for array
    subscripts)
  • Example
  • struct
  • int x
  • int y
  • p
  • p-gtx is equivalent to (p-gtx) / increment
    x, not p /
  • (p)-gtx / increment p before access x /
  • p-gty / fetch whatever y points to /
  • p-gty / increments y after accessing
    whatever y point to /
  • (p-gty) / increments whatever y point to,
    just like p-gty /
  • p-gty / increments p after accessing
    whatever y point to /

5
typedef
  • typedef
  • Creates synonyms (aliases) for previously defined
    data types
  • Use typedef to create shorter type names
  • Example
  • typedef struct card CardPtr
  • Defines a new type name CardPtr as a synonym for
    type struct card
  • typedef does not create a new data type while it
    only creates an alias
  • Example

6
Array of Structures
  • Example (before)
  • char namePERSONNAMESIZE
  • int tscorePERSON
  • int mathPERSON
  • int englishPERSON
  • Initialization of structure array
  • struct person_data
  • .. .. .. ..
  • person
  • Jane,180,89,91,
  • John,190,90,100,
  • .. .. .. ..
  • / similar to 2D array /
  • Example using separated arrays
  • average (int tscore, int math, int eng, int n)

struct person_data char nameNAMESIZE int
tscore int math int english personPERSON
(now) ?
the inner brace is not necessary Jane,180,89,91
, John,190,90,100, .. .. .. ..
?
Example using pointer to structure average
(struct person_data person, int n) int i,
total0,mathtotal 0, engtotal0 for (i0 iltn,
i) total person-gttscore mathtotal
person-gtmath engtotal person-gteng person
7
Unions
  • union
  • Memory that contains a variety of objects over
    time
  • Only contains one data member at a time
  • Members of a union share space
  • Conserves storage
  • Only the last data member defined can be accessed
  • union declarations
  • Same as struct
  • union Number
  • int x
  • float y
  • union Number value
  • Valid union operations
  • Assignment to union of same type
  • Taking address
  • Accessing union members .
  • Accessing members using pointers -gt

8
Define union
Initialize variables Set variables Print
Program Output
Put a value in the integer member and print both
members. int 100 double -925595921174331360000
00000000000000000000000000000000000000000.00000  
Put a value in the floating member and print both
members. int 0 double 100.000000
9
Bit Fields
  • Bit field
  • Member of a structure whose size (in bits) has
    been specified
  • Enable better memory utilization
  • Must be declared as int or unsigned
  • Cannot access individual bits
  • Declaring bit fields
  • Follow unsigned or int member with a colon ()
    and an integer constant representing the width of
    the field
  • Example
  • struct BitCard
  • unsigned face 4
  • unsigned suit 2
  • unsigned color 1
  • Unnamed bit field
  • Field used as padding in the structure
  • Nothing may be stored in the bits
  • Unnamed bit field with zero width aligns next bit
    field to a new storage unit boundary

struct Example unsigned a 13 unsigned
3 unsigned b 4
10
Enumeration Constants
  • Enumeration
  • Set of integer constants represented by
    identifiers
  • Enumeration constants are like symbolic constants
    whose values are automatically set
  • Values start at 0 and are incremented by 1
  • Values can be set explicitly with
  • Need unique constant names
  • Example
  • enum Months JAN 1, FEB, MAR, APR, MAY,
    JUN, JUL, AUG, SEP, OCT, NOV, DEC
  • Creates a new type enum Months in which the
    identifiers are set to the integers 1 to 12
  • Enumeration variables can only assume their
    enumeration constant values (not the integer
    representations)

11
1 January 2 February 3 March 4
April 5 May 6 June 7 July
8 August 9 September 10 October 11
November 12 December
12
Storage Management
  • C supports 4 functions, malloc(),
    calloc(),free(), and cfree() for storage
    management
  • malloc(n)
  • allocate a node while its content is still
    garbage
  • n is an integer, indicating the size of memory in
    byte which you would like to allocate
  • malloc() return a character pointer to that
    memory
  • So, you have to use cast operator (type), to
    change the type of the pointer.
  • Example
  • int ip
  • ip (int) malloc(sizeof(int))
  • struct treeNode tp
  • tp (struct tnode ) malloc(sizeof(struct
    tnode))

13
Storage Management (cont.)
  • free(p)
  • free() will release the memory allocated by
    malloc().
  • p is the pointer containing the address
    returning from malloc().
  • Example
  • int ip
  • ip (int) malloc(sizeof(int))
  • ... .. ..
  • free(ip) / Question can you free(ip) after
    ip ? /
  • Example
  • struct treeNode tp
  • tp(struct treeNode )malloc(sizeof(struct
    treeNode ))
  • ... .. ..
  • free(tp)
  • When there is no further memory, malloc() will
    return NULL pointer. It is a good idea to check
    the returning value of malloc().
  • if ((ip(int )malloc(sizeof(int))) NULL)
  • printf(\nMemory is FULL\n)
  • exit(1)

14
Storage Management (cont.)
  • calloc(n,size)
  • calloc() allow you to allocate an n elements
    array of same data type. Because n can be an
    integer variable, you can use calloc() to
    allocate a dynamic size array.
  • n is the element number of array that you want
    to allocate.
  • size is the number of byte of each element.
  • Unlike malloc(), calloc() guarantees that memory
    contents are all zero
  • Example allocate an array of 10 elements
  • int ip
  • ip (int) calloc(10, sizeof(int))
  • (ip1) refer to the 2nd element, the same as
    ip1
  • (ipi) refer to the i1th element, the same
    as ipi
  • Like malloc(), calloc() will return NULL, if no
    further memory is available.
  • cfree(p)
  • cfree() releases the memory allocated by
    calloc().
  • Example
  • cfree(ip)
Write a Comment
User Comments (0)
About PowerShow.com