Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can a char pointer variable be initialized to a string but an int pointer variable can not be initialized to an array of integers? [duplicate]

I am trying to understand the relationship between strings, arrays, and pointers.

The book I am reading has a program in which it initializes a variable as follows:

char* szString= "Name";

The way I understand this, is that a C-style string is simply an array of chars. An array is simply a shorthand version of referring to the pointer (which stores the first value of the array) and an offset. I.e. array[5] in fact returns what is evaluated from expression *(array+5).

So, from my understanding and testing the szString is in fact initialized as a pointer which points to the first address of the array storing "Name". I can deduce this because the output to:

cout << *szstring;

is the character "N".

My understanding of the statement

cout << szstring;

outputting the characters "Name", is that the method cout interprets the argument szstring as a string type and prints out all the characters until the NUL character. On the other hand for argument *szstring a different version of this method is used that supports C-style strings.

Therefore, if I can initialize a char type pointer to address the first element in an array of chars (a C-style string), why can I not initialize an int type pointer to the first element in an array of integers as follows:

int* intArray = {1,2,3};
like image 469
Filip Gajowniczek Avatar asked Apr 22 '17 21:04

Filip Gajowniczek


People also ask

Can you initialize a string from a char *?

A more convenient way to initialize a C string is to initialize it through character array: char char_array[] = "Look Here"; This is same as initializing it as follows: char char_array[] = { 'L', 'o', 'o', 'k', ' ', 'H', 'e', 'r', 'e', '\0' };

Can a char pointer point to a string?

We can create a character pointer to string in C that points to the starting address of the character array. This pointer will point to the starting address of the string, that is the first character of the string, and we can dereference the pointer to access the value of the string.

What happens when you cast a char pointer to an int pointer?

When casting character pointer to integer pointer, integer pointer holds some weird value, no where reasonably related to char or char ascii code. But while printing casted variable with '%c', it prints correct char value. Printing with '%d' gives some unknown numbers.

Can we assign string to char pointer in C++?

You can't really "assign a string" to a char * , because although a char* parameter is sometimes referred to as a "string parameter", it isn't actually a string, it's a pointer (to a string). If you're getting heap corruption, then the problem isn't the assignment, the problem is your management of allocated memory.


1 Answers

a C-style string is simply an array of chars

Correct.

An array is simply a shorthand version of referring to the pointer (which stores the first value of the array) and an offset.

No, not really.

the method cout interprets the argument szstring as a string type and prints out all the characters until the NUL character

cout is not a "method", but its operator<< works this way yes.

Why can a char pointer variable be initialized to a string but an int pointer variable can not be initialized to an array of integers?

The simple answer is that string literals are special, otherwise we would not be able to use them.

In many ways, including this way, the language standards dictate special handling for both string literals and char*s.

why can I not initialize an int type pointer to the first element in an array of integers

C++ could have ultimately extended the syntax of other pointer initialisations to do a similar thing, but it didn't actually need to because instead we have the far superior:

std::vector<int> myInts{1,2,3};
like image 62
Lightness Races in Orbit Avatar answered Oct 12 '22 01:10

Lightness Races in Orbit