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 ?

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 ?

  • can hold address of a simple character variable

  • can point to start of single dimension array

  • can point to memory in heap

  • can point to read only string

  • can point to a row in a double dimension array

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

ptr[0]

Holds address of variable x

ptr[1]

Holds address of variable y

ptr[2]

Holds startiing address of array arr

ptr[3]

Holds starting address of readonly string str

ptr[4]

Holds starting address of memory in heap hstr

ptr[5]

Holds starting address of single dimension array buffers[1]

  • Step 2 : Use ptr[0] to access contents of x

// 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 of y

// 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 of arr

// 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 of str

// 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 of hstr

// 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 of buffers[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;
}