PI Material for CSE 30

PI Material for CSE 30

CSE 30: Computer Organization and Systems Programming Lecture 6: C Data types: Pointers Diba Mirza University of California, San Diego 1 C Integer Data Types Type Size int 4 bytes short 2 bytes long 4 bytes long long 8 bytes unsigned 4 bytes 2 Other datatypes char c=‘a’; /* 1 byte */ • By default, may be signed or unsigned • Always enforce using the appropriate keyword float f; /* 4 bytes */ double d; /* 8 bytes */ 3 Accessing value, Lvalue and Rvalue int x,y; /* What is the value of x?*/ y=10; x=20; y= x>y ? x : y; 4 Pointers • Pointer: A variable that contains the address of a variable • Declaration: type * pointer_name; int *x; How do we initialize a pointer? Why pointers? 5 Accessing location To access the location/address, use the address operator ‘&’ int *x; 102 int y=20; 20 y 6 Pointers • How to make a pointer point to something. 102 120 int *x; x y int y; y = 3; x = &y; 7 Pointers • How to make a pointer point to something? int *x, y; 102 120 x ? y ? y = 3; 102 120 x ? y 3 x = &y; 102 120 x 120 y 3 sizeof(x)= x points to y 8 Pointer Diagrams • Short hand diagram for the following scenario 102 120 x 120 y 3 9 To change the value of a variable using pointers: use dereference * operator to left of pointer name 102 120 int y=3, *x; x y 3 x= &y; x y 3 *x = 5; 10 . Two ways of changing the value of any variable . Why this is useful will be clear when we discuss functions and pointers Change the value of y directly: x y 3 Change the value of y indirectly (via pointer x): 11 Pointers and Pointees int *p1, *p2, x; p1 = &x; p2 = p1; Q: Which of the following pointer diagrams best represents the outcome of the above code? A. B. x x C. Neither, the code is incorrect 12 Pointer and Pointee data types Q: This code gives a warning at compile time. Why? char *p; int y; p = &y; A. The pointer ‘p’ is made to point to a variable of incompatible type B. *p does not contain a valid value because y was not initialized 13 Q: What happens when we run the following code? int *p; *p = 5; A. B. 5 p 5 p C. Compile time error D. Runtime error 14 Segmentation faults (aka segfault) • Indicates that your program has crashed! • What caused the crash? – Segfaults occur if your program is trying to read or write an illegal memory location. 15 Q: What is the output of this code? int *p, x = 5; p = &x; printf(“%d”,(*p)++); A. The value pointed to by p, which is 5 B. The value pointed to by p plus one, which is 6 C. Undefined D. Compiler error E. Segmentation fault 16 Two important facts about Pointers 1) A pointer can only point to one type –(basic or derived ) such as int, char, a struct, another pointer, etc 2) After declaring a pointer: int *ptr; ptr doesn’t actually point to anything yet. We can either: make it point to something that already exists, or allocate room in memory for something new that it will point to Null check before dereferencing 17.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    17 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us