C++ Char Array pointer behavior vs string Array pointer -


c++ rookie first question.using code:blocks 16.01 gnu gcc compiler. in advance. code;

#include <iostream> using namespace std;   int main(){     char chararr[]="hello";     cout<<chararr<<endl;  //outputs hello.      string strarr[]={"hello", "stack", "overflow"};     string *pstrarr=strarr; //pointer strarr; same &strarr[0].     cout<<*pstrarr<<endl; //derreferencing pointer , outputs hello      char chararr1[]="hello";     char *pchararr1=chararr1;  /*pointer chararr1.(chararr cout hello, not h, therefore assumed storing in memory hello);*/     cout<<*pchararr1<<endl;  /*dereferencing, outputs h, not hello expected. */      return 0;  } 

observation; chararr outputs hello, therefore assumed creating pointer , dereferencing should output hello; actual output h, seems inconsistent behavior observed on string array, whereas first element both pointed , dereferenced.

question is: failing understand char array. appreciate explanation of above in (as possible) layman terms.

ps:did use search function , talked duck. time. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ after answers realize actual question should why lines 2 , 4 produce different outputs, strarr being memory address (behaves pointer) while chararr outputs array contents.

string strarr[]= {"hello","world","how", "are","you"}; cout<<strarr<<endl;//outputs 0x28fedc.  char chararr[]="hello"; cout<<chararr<<endl; // outputs hello 

thanks

in code snippet

char chararr1[]="hello"; char *pchararr1=chararr1;  /*pointer chararr1.(chararr cout hello, not h, therefore assumed storing in memory hello);*/ cout<<*pchararr1<<endl;  /*dereferencing, outputs h, not hello expected. */ 

the object pchararr1 has type char *. points first character of string "hello" stored in array chararr1. dereferencing pointer you'll object of type char character pointed pointer. character 'h'.

in code snippet

string strarr[]={"hello", "stack", "overflow"}; string *pstrarr=strarr; //pointer strarr; same &strarr[0]. cout<<*pstrarr<<endl; //derreferencing pointer , outputs hello 

the object pstrarr has type std::string * , points object of type std::string. dereferencing pointer you'll object of type std::string contains character sequence "hello". in statement

cout<<*pstrarr<<endl; //derreferencing pointer , outputs hello 

this sequence outputted.

thus in statement

cout<<chararr<<endl;  //outputs hello 

chararr has type char * (the array designator implicitly converted pointer first element).

in statement

cout<<*pchararr1<<endl;  /*dereferencing, outputs h, not hello expected. */ 

*pchararr1 has type char.

and @ last in statement

cout<<*pstrarr<<endl; //derreferencing pointer , outputs hello 

*pstrarr has type std::string.

take account these declarations

char chararr1[]="hello"; char *pchararr1=chararr1;  /*pointer chararr1.(chararr cout hello, not h, therefore assumed storing in memory hello);*/ 

the output of these statements

cout<<chararr1<<endl;   

and

cout<<pchararr1<<endl;   

will same , equal outputting string "hello"

however these statements

cout<<*chararr1<<endl;   

and

cout<<*pchararr1<<endl;   

only 1 character 'h' outputted.

in first statement mentioned array designator implicitly converted pointer first element in expression *chararr1


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -