1 / 28

POINTER

POINTER. Pointer ?. One of the features of the C language that gives C language its sophistication, power, and complexity Every byte in computer memory has an address and the address of the first allocated byte of the variable is called a pointer to the variable

jalena
Télécharger la présentation

POINTER

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. POINTER

  2. Pointer ? • One of the features of the C language that gives C language its sophistication, power, and complexity • Every byte in computer memory has an address and the address of the first allocated byte of the variable is called a pointer to the variable • a variable that holds an address is called a pointer variable.

  3. 65 is the ASCII code for letter A ch address is 1060 1060 65 1 byte allocated to ch 1061 num address is 1062 1062 10 1063 2 byte allocated to num 1064 Conceptual View of a variable in Memory int num =10; char ch = ‘A’; Memory

  4. Address operator, & • To obtain the address of a specifies variable • Examples int num = 10; char ch = ‘A’; &num - address of the variable num called pointer to num &ch - address of the variable ch called pointer to ch NOT VALID - & 60, & ‘A’, & (K+2), &(Index/6)

  5. More about variables • Every variable is associated with 5 attributes • variable type • variable name • variable contents • variable address • variable size

  6. type(int) name(num) size is 2 bytes sizeof(int) contents(value) Address is 1062 (&num) Attributes of a Variable int num = 10; 1060 1061 1062 1063 1064

  7. Examples #include <stdio.h> int main( ) { int num; num = 10; printf(“The address of num is %p\n”, &num); return 0; }

  8. Input Function scanf( ) • Used to read input data from the keyboard and store it in the specified storage. • One of the function in stdio.h library • Syntax scanf(“control string”, arg1, arg2,….) • Examples int num; /* declare variables */ scanf(“%d”, &num); /* read from keyboard */

  9. declaration statement conversion specification address of (pointer to) num assumed num memory location scanf ( ) function int num; scanf(“%d”, &num); num 1062

  10. Examples /* Definition: This program asks for a name and 2 integer numbers. It displays the name and sum, product of the numbers. */ #include <stdio.h> /* include the stdio.h header file */ int main ( ) { int num1, num2 ; /* declare the variables */ printf ( " \nEnter two numbers and press the Enter key: " ) ; /* read 2 integer numbers from the keyboard */ scanf ( "%d %d", &num1, &num2 ) ; printf ( " \n %d + %d = %d \n ", num1, num2, num1+ num2 ) ; printf ( " \n %d - %d = %d \n ", num1, num2, num1 - num2 ) ; printf ( " \n %d * %d = %d \n ", num1, num2, num1 * num2 ) ; return 0 ; }

  11. Program Output Enter two numbers and press the Enter key : 10 20 10 + 20 = 30 10 - 20 = -10 10 * 20 = 200

  12. Conversion specification conversion description Example %c interpret input as a character scanf(“%c”, &ch); %d or %I interpret input as a signed integer scanf(“%d”, &inum); %f interpret input as floating-point scanf(“%f”,&fnum); number %e interpret input as floating-point scanf(“%e”,&fnum); number, e notation %s interpret input as a character string scanf(“%s”,name);

  13. Character Strings • C doesn’t provides data type for strings • declare an array of char type to store character strings • Examples char Last_Name [40]; scanf(“%s”, Last_Name);

  14. x x \0 String x character ‘x’ the character x “x” the string x null character, terminating the string

  15. Program Example /* Definition: This program asks for a name and displays the name with a smile. */ #include <stdio.h> int main ( ) { char name [ 40 ] ; /* declare the variables */ printf ( " \nEnter your name and press the Enter key: " ); scanf ( "%10s", name ) ; /* read name from the keyboard */ printf ( " \n :-) Hi %s! \n ", name ) ; /* display the last name */ return 0; } Program Output Enter your name and press the Enter key : Unimas :-) Hi Unimas !

  16. Formatting Input Data char name [40]; scanf(“%10s”,name); in this case scanf() stops after reading 10 characters or encountering a whitespace character, whichever comes first

  17. Conversion Specification Char ch, name[40]; int inum; float fnnum; Statement Input data Read by scanf( ) scanf(“%s”, name); Unimas Sarawak Unimas scanf(“%9s”, name); Unimas Sarawak Unimas scanf(“%4s”, name); Unimas Sarawak Unim scanf(“%3d”,&inum); 123456 123 scanf(‘%3.3f”,&fnum); 123.3 123.300

  18. Pointer Declarations Syntax data type *identifier • data type is any valid C data type such as int, or float • *(asterisk) the pointer indicator • identifier is any valid variable name Examples int *pint; /* declare a pointer variable of int type */

  19. More example short *sp; /* the pointer variable sp points to short integer type */ int *ip; /* the pointer variable ip points to an integer type */ char *cp; /* the pointer variable cp points to a character type */ float *fp; /* the pointer variable fp points to a floating point type */ double *dp; /* the pointer variable dp points to a double precision type */

  20. Pointer Initializations VALID int num; int *pnum=&num; NOT VALID int *pnum=&num; int num;

  21. pnum num num address 2 bytes are accessed Storing Addresses int *pnum, num; /*declaring a pointer and an int type variables */ pnum = &num; /*assigning the address of the variable num to the pointer variable pint */ declaration statements storing the address of num in pnum int *pnum; int num; pnum=&num;

  22. Indirection Operator * • Used for manipulating data by referring to variables by their addresses rather than their names. • Called indirection or dereferencing operator, is placed before a pointer variable name to obtain the value of the object that the pointer is pointing to • indirection operator * is a unary operator and can only be applied to pointer variables • used both to declare a pointer variable and to access the variable whose address is stored in a pointer

  23. Examples int *pnum; /* declare a pointer variable */ int num=100, value; /*declare int type variables */ pnum = &num; /*assign the address of the variable num to the pointer variable pnum */ value = *pnum; /*use the indirection operator to obtain the contents of the variable that is pointed to by pnum */

  24. Address 2000 2002 100 2004 2006 2002 2008 2120 Conceptual View Declaration and initialization statements int num = 100; int *pnum; storing the address of num in pnum pnum=&num; ppnum=&pnum num &num pnum *pnum &pnum ________________________________________ 100 2002 2002 100 2008

  25. Direct and Indirect Methods of Accessing a Variable /* direct method */ /* pointer method */ int num 5; int num = 5; int value; int value; int *pnum = &num; value = num; value = *pnum;

  26. Common Errors • Attempting to obtain the address of a constant value and constant value doesn’t have an address ptr = &45; /* invalid assignment */ ptr = &(Index + 10); /* invalid assignment */ • initializing pointer incorrectly int *ptr = 5; /* invalid initialization */

  27. Multiple Indirection • Pointer point to another pointer - multiple indirection • have to declare a pointer to pointer variable before we can use it int **newpointer Example int num, *pnum, **ppnum; num=100; /* store 10 in num */ pnum=&num; /* store num address in pnum */ ppnum=&pnum; /* store pnum address in ppnum */

  28. Address 2000 100 num 2002 2004 pnum 2006 2000 2008 2006 2010 ppnum Conceptual View Declaration and initialization statements int num = 100; int *pnum, **pnum; storing the address of num in pnum, and address of pnum ppnum pnum = &num; ppnum = &pnum; num &num pnum *pnum **ppnum *ppnum &pnum &ppnum 100 2000 2000 100 100 2006 2006 2010

More Related