What is difference between char* and int* data type to create array of pointers in C++? -
while creating array of pointers int
data type following code works:
int var[] = {10, 100, 200, 1000}; int *ptr[] = {&var[0], &var[1], &var[2], &var[3]};
while creating array of pointers char
data type following legal:
char *names[] = {"mathew emerson", "bob jackson"};
but if create array of pointers int
data type follows:
int var[] = {10, 100, 200, 1000}; int *ptr[] = {var[0], var[1], var[2], var[3]};
i compiler error. understand why getting compilation error in above method of declaration array of int
data type, var[i] not reference variable pointer must point i.e. address, shouldn't error same logic in declaration of char
array of pointer.
what reason acceptable in char
array of pointers?
is " a string value " address of pointer can point or const string value.
char *names[] = {"mathew emerson", "bob jackson"};
is not legal in c++. string literal has type of const char[]
illegal store char*
violates const-correctness. compilers allow still compile legacy c since string literals have type char[]
not standard c++. if turn warnings on compiler should along lines of
main.cpp: in function 'int main()': main.cpp:5:53: warning: iso c++ forbids converting string constant 'char*' [-wpedantic] char *names[] = {"mathew emerson", "bob jackson"};
if want array of strings suggest use std::string
like
std::string names[] = {"mathew emerson", "bob jackson"};
the reason
char *names[] = {"mathew emerson", "bob jackson"};
"works" since string literals arrays implicitly decay pointers so
{"mathew emerson", "bob jackson"}
becomes
{ address_of_first_string_literal, address_of_second_string_literal}
and used initialize pointers in array.
int *ptr[] = {var[0], var[1], var[2], var[3]};
cannot work because var[n]
reference int
in array , not pointer.
Comments
Post a Comment