As far as the compiler is concerned, a string constant is represented as an anonymous char array.
So your first post is
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char anon1[] = "Chair";
const char anon2[] = "Stool";
const char anon3[] = "Table";
const char anon4[] = "";
int main()
{
char *arr[] = {anon1, anon2, anon3, anon4};
char **arrptr = arr;
while (*arrptr != anon4)
{
printf("%s\n", *arrptr++);
}
return 0;
}
But the compiler (well a stupid one) could have done this, not realising two strings are the same.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const char anon1[] = "Chair";
const char anon2[] = "Stool";
const char anon3[] = "Table";
const char anon4[] = "";
const char anon5[] = "";
int main()
{
char *arr[] = {anon1, anon2, anon3, anon4};
char **arrptr = arr;
while (*arrptr != anon5)
{
printf("%s\n", *arrptr++);
}
return 0;
}
Now the code is very broken.
Using a NULL pointer is a much better idea.