For starters this declaration
char** myArray={"Hello", "World"};
does not make a sense, You may not initialize a scalar object with a braced-list with more than one expression.
It seems you mean a declaration of an array
const char* myArray[] ={ "Hello", "World"};
In this case the for loop can look like
for( const char** str = myArray; *str != NULL; str++) {
//do Something
}
But the array does not have an element with a sentinel value. So this condition in the for loop
*str != NULL
results in undefined behavior.
You could rewrite the loop for example like
for( const char** str = myArray; str != myArray + sizeof( myArray ) / sizeof( *myArray ); str++) {
//do Something
}
Or instead of the expression with the sizeof operator you could use the standard function std::size introduced in the C++ 17 Standard.
Otherwise the initial loop would be correct if the array is declared like
const char* myArray[] ={ "Hello", "World", nullptr };
In this case the third element will satisfy the condition of the loop.