C Tutorial
A pointer is a variable that holds the memory address of another variable (direct address of the memory location).
Every byte in the computer's memory has an address, so pointer holds the address through which variable can be directly accessed.
Addresses are just numbers as our house numbers, and address starts at NULL and goes up from 1,2, 3 etc..
Need to declare a pointer before using it to store any variable address.
Let us consider below decalration,
int a = 25; int *b; b = &a;
a is the integer variable and reserves the space in memory to hold integer value 25.
b is the integer pointer and can contain the address of integer variable a.
Value at address contained in b is an integer.
Similarly need to declare b as float pointer if needs to contain the address of float variable.
This c program explains how to use the pointers with int, float and character data types.
#include<stdio.h> void main() { char ch, *chp; int i, *ip; float ff, *fp; printf("Enter character: "); scanf("%c", &ch); printf("\nEnter integer: "); scanf("%d", &i); printf("\nEnter float: "); scanf("%f", &ff); chp = &ch; ip = &i; fp = &ff; printf("\nAddress contained in chp: %u", chp); printf("\nAddress contained in ip: %u", ip); printf("\nAddress contained in fp: %u", fp); printf("\nValue of ch using chp pointer: %c", *chp); printf("\nValue of i using ip pointer: %d", *ip); printf("\nValue of ff using fp pointer: %f", *fp); }Output:
$ cc c-pointers.c $ ./a.out Enter character: E Enter integer: 34 Enter float: 55.5 Address contained in chp: 274340199 Address contained in ip: 274340192 Address contained in fp: 274340188 Value of ch using chp pointer: E Value of i using ip pointer: 34 Value of ff using fp pointer: 55.500000
int i=25; char *chp; chp = (char *) &i;
2 bytes used to store integer value and for character 1 bytes. during char * type casting, considers only first 1 byte of data and not another byte.
#includeOutput:void main() { char ch, *chp, *fp1, *fp2; int i, *ip; float ff, *fp; printf("Enter character: "); scanf("%c", &ch); printf("\nEnter integer: "); scanf("%d", &i); printf("\nEnter float: "); scanf("%f", &ff); chp = &ch; ip = &i; fp = &ff; fp1 = (char *) &ch; fp2 = (char *) &i; printf("\nAddress contained in chp: %u", chp); printf("\nAddress contained in ip: %u", ip); printf("\nAddress contained in fp: %u", fp); printf("\nAddress contained in fp: %u", fp1); printf("\nAddress contained in fp: %u", fp2); printf("\nValue of ch using chp pointer: %c", *chp); printf("\nValue of i using ip pointer: %d", *ip); printf("\nValue of ff using fp pointer: %f", *fp); printf("\nValue of ch using fp1 pointer: %c", *fp1); printf("\nValue of i using fp2 pointer: %c", *fp2); }
$ cc c-pointers.c [jaganathan@dhcp35-211 cprog]$ ./a.out Enter character: E Enter integer: 33 Enter float: 65.4 Address contained in chp: 1407846903 Address contained in ip: 1407846896 Address contained in fp: 1407846892 Address contained in fp: 1407846903 Address contained in fp: 1407846896 Value of ch using chp pointer: E Value of i using ip pointer: 33 Value of ff using fp pointer: 65.400002 Value of ch using fp1 pointer: E Value of i using fp2 pointer: !
Incorrect values (garbage values) returned for incorrect pointers.
Warning message is thrown as 'incompatible pointer type' in compilation.
#include<stdio.h> void main() { char ch, *chp; int i, *ip; float ff, *fp; printf("Enter character: "); scanf("%c", &ch); printf("\nEnter integer: "); scanf("%d", &i); printf("\nEnter float: "); scanf("%f", &ff); chp = &i; ip = &ch; fp = &ff; printf("\nAddress contained in chp: %u", chp); printf("\nAddress contained in ip: %u", ip); printf("\nAddress contained in fp: %u", fp); printf("\nValue of ch using chp pointer: %c", *chp); printf("\nValue of i using ip pointer: %d", *ip); printf("\nValue of ff using fp pointer: %f", *fp); }Output:
$ cc c-pointers.c c-pointers.c: In function ‘main’: c-pointers.c:17:9: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] chp = &i; ^ c-pointers.c:18:8: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types] ip = &ch; ^ $ ./a.out Enter character: E Enter integer: 43 Enter float: 44.3 Address contained in chp: 3399891056 Address contained in ip: 3399891063 Address contained in fp: 3399891052 Value of ch using chp pointer: + Value of i using ip pointer: -1506251707 Value of ff using fp pointer: 44.299999[
C Tutorial
Privacy Policy | Copyright2020 - All Rights Reserved. | Contact us
| Report website issues in Github
| Facebook page
| Google+ page