Array of char Single Pointers
In this section, you are going to learn
How to use single pointer with a variable ?
How to use single pointer with an array of characters ?
How to use single pointer with heap ?
What is the syntax for Array of Single Pointers ?
Basics of Array of Single Pointers
Example 1 : Array of character pointers : Pointers pointing to variables
Example 2 : Array of character pointers : Pointers pointing to single dimension arrays
Example 3 : Array of character pointers : Pointers pointing to Heap
Example 4 : Array of character pointers : Pointers pointing to Read only Strings
Example 6: Array of character pointers : Combine all the above
Functions and Array of Single Pointers
Syntax : char * ptr [ ] = { p1, p2, p3 , etc., };
ptr
is array of character pointers
ptr[0], ptr[1], ptr[2] are single pointers
What can we do with Single pointer ? |
|
---|---|
|
|
|
|
|
|
|
|
|
What can we do with ptr[0], ptr[1] ? |
|
---|---|
ptr[0], ptr[1], ptr[2] … are single pointers |
|
ptr[0], ptr[1], ptr[2] can hold address of a simple character variable |
|
ptr[0], ptr[1], ptr[2] can point to start of single dimension array |
|
ptr[0], ptr[1], ptr[2] can point to memory in heap |
|
ptr[0], ptr[1], ptr[2] can point to read only string |
|
ptr[0], ptr[1], ptr[2] can point to a row in a double dimension array |
Step 1 : Define an array of pointers
char x = 65;
char y = 66;
char z = 67;
char *ptr[] = { &x, &y, &z };
Step 2 : Read variables using pointers
printf("x = %d\n", *ptr[0]);
printf("y = %d\n", *ptr[1]);
printf("z = %d\n", *ptr[2]);
Step 3 : Write variables using pointers
*ptr[0] = 100; // changes x
*ptr[1] = 101; // changes y
*ptr[2] = 102; // changes z
See full program below
#include <stdio.h>
int main(void)
{
char x = 65;
char y = 66;
char z = 67;
char *ptr[] = { &x, &y, &z };
printf("x = %d\n", *ptr[0]);
printf("y = %d\n", *ptr[1]);
printf("z = %d\n", *ptr[2]);
*ptr[0] = 100;
*ptr[1] = 101;
*ptr[2] = 102;
printf("x = %d\n", *ptr[0]);
printf("y = %d\n", *ptr[1]);
printf("z = %d\n", *ptr[2]);
return 0;
}
Step 1 : Define an array of pointers
char arr0[] = "Laptop";
char arr1[] = "Mouse";
char arr2[] = "SCSI";
char *ptr[] = { arr0, arr1, arr2 };
Step 2 : Read variables using pointers
printf("arr0 = %s\n", ptr[0]);
printf("arr1 = %s\n", ptr[1]);
printf("arr2 = %s\n", ptr[2]);
OR
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, ptr[i]);
}
Step 3 : Write variables using pointers
strcpy(ptr[1], "Keyboard");
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
//ptr[0] is pointing to arr0
//ptr[1] is pointing to arr1
//ptr[2] is pointing to arr2
char *ptr[] = { arr0, arr1, arr2 };
//Read using pointers
printf("arr0 = %s\n", ptr[0]);
printf("arr1 = %s\n", ptr[1]);
printf("arr2 = %s\n", ptr[2]);
//Write using pointers
strcpy(ptr[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, ptr[i]);
}
return 0;
}
Step 1 : Define an array of pointers
char *p1 = malloc(10);
char *p2 = malloc(10);
char *p3 = malloc(10);
char *ptr[] = { p1, p2, p3 };
Step 2 : Write variables using array of pointers
strcpy(ptr[0], "Laptop");
strcpy(ptr[1], "Keyboard");
strcpy(ptr[2], "Mouse");
Step 3 : Read variables using array of pointers
for (int i = 0;i < 3; i++) {
printf("String : %d : %s\n", i, ptr[i]);
}
Step 4 : Free Heap using using array of pointers
for (int i = 0;i < 3; i++) {
free(ptr[i]);
}
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char *p1 = malloc(10);
char *p2 = malloc(10);
char *p3 = malloc(10);
char *ptr[] = { p1, p2, p3 };
//Write heap using array of pointers
strcpy(ptr[0], "Laptop");
strcpy(ptr[1], "Keyboard");
strcpy(ptr[2], "Mouse");
//Read heap using array of pointers
for (int i = 0;i < 3; i++) {
printf("String : %d : %s\n", i, ptr[i]);
}
//Free heap using array of pointers
for (int i = 0;i < 3; i++) {
free(ptr[i]);
}
return 0;
}
Step 1 : Define an array of pointers
char *ptr[] = { "Laptop", "Mouse", "SCSI" };
Step 2 : Read variables using pointers
for (int i = 0; i < 3 ; i++) {
printf("String %d : %s\n", i, ptr[i]);
}
Step 3 : Write variables using pointers
Not possible ! Since pointers are pointing to read only strings !
See full program below
#include <stdio.h>
#include <string.h>
int main(void)
{
char *ptr[] = { "Laptop", "Mouse", "SCSI" };
for (int i = 0; i < 3 ; i++) {
printf("String %d : %s\n", i, ptr[i]);
}
return 0;
}
Step 1 : Define an array of pointers
char buffers[3][10] = { "Laptop", "Mouse", "SCSI" };
char *ptr[] = { buffers[0], buffers[1], buffers[2] };
Step 2 : Read variables using array of pointers
for (int i = 0; i < 3 ; i++) {
printf("String %d : %s\n", i, ptr[i]);
}
Step 3 : Write variables using array of pointers
strcpy(ptr[2], "Keyboard");
See full program below
#include <stdio.h>
#include <string.h>
int main(void)
{
char buffers[3][10] = { "Laptop", "Mouse", "SCSI" };
char *ptr[] = { buffers[0], buffers[1], buffers[2] };
strcpy(ptr[2], "Keyboard");
for (int i = 0; i < 3 ; i++) {
printf("String %d : %s\n", i, ptr[i]);
}
return 0;
}
Step 1 : Define an array of pointers
char *ptr[] = {&x, p, arr, str, hstr, buffers[1] };
Here there are 6 pointers. See below
Pointer |
|
---|---|
|
Holds address of variable |
|
Holds address of variable |
|
Holds startiing address of array |
|
Holds starting address of readonly string |
|
Holds starting address of memory in heap |
|
Holds starting address of single dimension array |
Step 2 : Use
ptr[0]
to access contents ofx
// Access variable "x" using ptr[0]
printf("First character in ptr[0] = %c\n", *ptr[0]);
printf("First character in ptr[0] = %c\n", ptr[0][0]);
Step 3 : Use
ptr[1]
to access contents ofy
// Access variable "y" using ptr[1]
printf("First character in ptr[1] = %c\n", *ptr[1]);
printf("First character in ptr[1] = %c\n", ptr[1][0]);
Step 4 : Use
ptr[2]
to access contents ofarr
// Access full string present in "arr" using ptr[2]
printf("Printing arr using ptr[2] : %s\n", ptr[2]);
//Access individual characters in "arr" using ptr[2]
for (int i = 0; i < strlen(ptr[2]); i++)
{
printf("ptr[2][%d] = %c\n", i, ptr[2][i]);
}
Step 5 : Use
ptr[3]
to access contents ofstr
// Access full string present in "arr" using ptr[3]
printf("Printing str using ptr[3] : %s\n", ptr[3]);
//Access individual characters in "arr" using ptr[3]
for (int i = 0; i < strlen(ptr[3]); i++)
{
printf("ptr[3][%d] = %c\n", i, ptr[3][i]);
}
Step 6 : Use
ptr[4]
to access contents ofhstr
// Access full string present in "arr" using ptr[4]
printf("Printing hstr using ptr[4] : %s\n", ptr[4]);
//Access individual characters in "arr" using ptr[4]
for (int i = 0; i < strlen(ptr[4]); i++)
{
printf("ptr[4][%d] = %c\n", i, ptr[4][i]);
}
Step 7 : Use
ptr[5]
to access contents ofbuffers[1]
// Access full string present in "arr" using ptr[5]
printf("Printing buffers[1] using ptr[5] : %s\n", ptr[5]);
//Access individual characters in "arr" using ptr[5]
for (int i = 0; i < strlen(ptr[5]); i++)
{
printf("ptr[5][%d] = %c\n", i, ptr[5][i]);
}
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char x = 65;
char y = 66;
char *p = &y;
char arr[] = "Laptop";
char *str = "Mouse";
char *hstr = malloc(10 * sizeof(char));
strcpy(hstr, "scsi");
char buffers[][10] = {"Home", "House", "Palace" };
char *ptr[] = {&x, p, arr, str, hstr, buffers[1] };
// Access variable "x" using ptr[0]
printf("First character in ptr[0] = %c\n", *ptr[0]);
printf("First character in ptr[0] = %c\n", ptr[0][0]);
// Access variable "y" using ptr[1]
printf("First character in ptr[1] = %c\n", *ptr[1]);
printf("First character in ptr[1] = %c\n", ptr[1][0]);
// Access full string present in "arr" using ptr[2]
printf("Printing arr using ptr[2] : %s\n", ptr[2]);
//Access individual characters in "arr" using ptr[2]
for (int i = 0; i < strlen(ptr[2]); i++)
{
printf("ptr[2][%d] = %c\n", i, ptr[2][i]);
}
// Access full string present in "arr" using ptr[3]
printf("Printing str using ptr[3] : %s\n", ptr[3]);
//Access individual characters in "arr" using ptr[3]
for (int i = 0; i < strlen(ptr[3]); i++)
{
printf("ptr[3][%d] = %c\n", i, ptr[3][i]);
}
// Access full string present in "arr" using ptr[4]
printf("Printing hstr using ptr[4] : %s\n", ptr[4]);
//Access individual characters in "arr" using ptr[4]
for (int i = 0; i < strlen(ptr[4]); i++)
{
printf("ptr[4][%d] = %c\n", i, ptr[4][i]);
}
// Access full string present in "arr" using ptr[5]
printf("Printing buffers[1] using ptr[5] : %s\n", ptr[5]);
//Access individual characters in "arr" using ptr[5]
for (int i = 0; i < strlen(ptr[5]); i++)
{
printf("ptr[5][%d] = %c\n", i, ptr[5][i]);
}
free(hstr);
return 0;
}
Step 1 : Define an array of pointers
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
char *ptr[] = { arr0, arr1, arr2 };
Step 2 : Pass array of pointers by value
fun(ptr);
Step 3 : Define a function which takes array of pointers as parameter
void fun(char *ptr_v[])
{
}
Step 4 : Read variables using array of pointers inside function
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, ptr_v[i]);
}
Step 5 : Write variables using array of pointers inside function
strcpy(ptr_v[1], "Keyboard");
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fun(char *ptr_v[])
{
//Read using pointers
printf("arr0 = %s\n", ptr_v[0]);
printf("arr1 = %s\n", ptr_v[1]);
printf("arr2 = %s\n", ptr_v[2]);
//Write using pointers
strcpy(ptr_v[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, ptr_v[i]);
}
}
int main(void)
{
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
//ptr[0] is pointing to arr0
//ptr[1] is pointing to arr1
//ptr[2] is pointing to arr2
char *ptr[] = { arr0, arr1, arr2 };
fun(ptr);
return 0;
}
Step 1 : Define a type for array of pointers
typedef char *tptr[];
Step 1 : Define an array of pointers using new type
tptr
tptr ptr = { arr0, arr1, arr2 };
Step 2 : Pass array of pointers by Value
fun(ptr);
Step 3 : Define a function which takes array of pointers as parameter
void fun(tptr ptr_v)
{
}
Step 4 : Read variables using array of pointers inside function
printf("arr0 = %s\n", ptr_v[0]);
printf("arr1 = %s\n", ptr_v[1]);
printf("arr2 = %s\n", ptr_v[2]);
Step 5 : Write variables using array of pointers inside function
strcpy(ptr_v[1], "Keyboard");
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char *tptr[];
void fun(tptr ptr_v)
{
//Read using pointers
printf("arr0 = %s\n", ptr_v[0]);
printf("arr1 = %s\n", ptr_v[1]);
printf("arr2 = %s\n", ptr_v[2]);
//Write using pointers
strcpy(ptr_v[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, ptr_v[i]);
}
}
int main(void)
{
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
tptr ptr = { arr0, arr1, arr2 };
fun(ptr);
return 0;
}
Step 1 : Define array of pointers
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
char *ptr[] = { arr0, arr1, arr2 };
Step 2 : Pass array of pointers by reference to a function
fun(&ptr);
Step 3 : Define the function
fun
and perform read, write
void fun(char * (*ptr_r)[])
{
//Read using pointers
printf("arr0 = %s\n", (*ptr_r)[0]);
printf("arr1 = %s\n", (*ptr_r)[1]);
printf("arr2 = %s\n", (*ptr_r)[2]);
//Write using pointers
strcpy((*ptr_r)[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, (*ptr_r)[i]);
}
}
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fun(char * (*ptr_r)[])
{
//Read using pointers
printf("arr0 = %s\n", (*ptr_r)[0]);
printf("arr1 = %s\n", (*ptr_r)[1]);
printf("arr2 = %s\n", (*ptr_r)[2]);
//Write using pointers
strcpy((*ptr_r)[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, (*ptr_r)[i]);
}
}
int main(void)
{
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
//ptr[0] is pointing to arr0
//ptr[1] is pointing to arr1
//ptr[2] is pointing to arr2
char *ptr[] = { arr0, arr1, arr2 };
fun(&ptr);
return 0;
}
Step 1 : Define the type for array of pointers
typedef char *tptr[];
Step 2 : Define array of pointers
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
tptr ptr = { arr0, arr1, arr2 };
Step 3 : Pass array of pointers by reference to a function
fun(&ptr);
Step 4 : Define the function
fun1
and perform read, write
void fun(tptr *ptr_r)
{
//Read using pointers
printf("arr0 = %s\n", (*ptr_r)[0]);
printf("arr1 = %s\n", (*ptr_r)[1]);
printf("arr2 = %s\n", (*ptr_r)[2]);
//Write using pointers
strcpy((*ptr_r)[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, (*ptr_r)[i]);
}
}
See full program below
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char *tptr[];
void fun(tptr *ptr_r)
{
//Read using pointers
printf("arr0 = %s\n", (*ptr_r)[0]);
printf("arr1 = %s\n", (*ptr_r)[1]);
printf("arr2 = %s\n", (*ptr_r)[2]);
//Write using pointers
strcpy((*ptr_r)[1], "Keyboard");
//Iterate array of pointers using pointer
for (int i = 0; i < 3; i++) {
printf("String %d : %s\n", i, (*ptr_r)[i]);
}
}
int main(void)
{
char arr0[10] = "Laptop";
char arr1[10] = "Mouse";
char arr2[10] = "SCSI";
tptr ptr = { arr0, arr1, arr2 };
fun(&ptr);
return 0;
}
Current Module
Previous Module
Next Module
Other Modules