Array of character pointers
Consider an array of n elements. If each element in the array is a pointer to character, then the array is called as array of character pointer.
How to declare array of character pointer?
Below is the declaration for character pointer.
char *arr[10];
How to initialize array of character pointers?
Below is the initialization of array of character pointers.
char *days[7] = { "SUN", "MON", "TUE", "WED",
"THU", "FRI", "SAT"};
Here, days is an array of 7 character pointers. Each character pointer in the array days refers to the string constant at the corresponding index in the array. For example,
days[0] points to the string constant "SUN"
days[1] points to the string constant "MON"
days[2] points to the string constant "TUE"
days[3] points to the string constant "WED"
days[4] points to the string constant "THU"
days[5] points to the string constant "FRI"
days[6] points to the string constant "SAT"
Dynamic memory allocation for array of character pointers:
Below is the procedure to perform dynamic memory allocation for array of character pointers.
char *days[7];
for (i = 0; i < 7; i++) {
// allocate memory block of size 32 bytes
days[i] = (char *)malloc(sizeof(char) * 32);
}
How to access data pointed by character pointers in an array?
Below program explains how to access data pointed by character pointer in an array.
#include <stdio.h>
int main() {
int i, ch;
char *holiday[2] = {"SATURDAY", "SUNDAY"};
for (i = 0; i < 2; i++) {
/* access char by char using char pointer */
while ((ch = *(holiday[0]++)) != '\0') {
printf("%c", ch);
}
printf("\n");
}
return 0;
}
Output:
jp@jp-VirtualBox:~/$ ./a.out
SATURDAY
SUNDAY
Let us now see how the data are stored in memory in the case of static memory allocation.
#include <stdio.h>
int main() {
int i, j, ch;
char *holiday[2] = {"SAT", "SUN"}; // char pointer
for (i = 0; i < 2; i++) {
j = 0;
/* loop until null character */
while(*(holiday[i] + j) != '\0') {
/* print the address and value */
printf("0x%x => %c\n",
(holiday[i] + j), *(holiday[i] + j));
j++;
}
/* print the address & value of null character */
printf("0x%x => \\%d\n", (holiday[i] + j), *(holiday[i] + j));
}
return 0;
}
Output:
jp@jp-VirtualBox:~/$ ./a.out
0x8048560 => S
0x8048561 => A
0x8048562 => T
0x8048563 => \0
0x8048564 => S
0x8048565 => U
0x8048566 => N
0x8048567 => \0
From the output, we could infer that the characters in string constants "SUN" and "SAT" are located at consecutive memory locations.
Comments
Post a Comment