Tsol
Tsol

Reputation: 21

Pointers and data types

I have the following question.

Given that a pointer holds the value of a memory address, why is it permitted to add an integer data type value to a pointer variable but not a double data type?

My thoughts: Is it because we assume that the pointer is an int as well, or maybe because if we add a double will increase its length?

Thank you for your time.

Upvotes: 2

Views: 931

Answers (3)

CAM
CAM

Reputation: 25

You can not add a double* (pointer) to an int* (pointer) via the conventions of C. A pointer holds a value of a memory address ["stores/points to the address of another variable"] that value in essence is determined by its type in this case int(4 byte-block of memory if I recall). A double is a double-precision, 64-bit floating-point data type. Just can't do it from the most "hardware" of levels.

Upvotes: 0

Slava
Slava

Reputation: 44288

My thoughts: Is it because we assume that the pointer is an int as well, or maybe because if we add a double will increase its length?

If you look to documentation it says:

Certain addition, subtraction, increment, and decrement operators are defined for pointers to elements of arrays: such pointers satisfy the LegacyRandomAccessIterator requirements and allow the C++ library algorithms to work with raw arrays.

(emphasis is mine) and you should remember that:

*(ptr + 1)

is equal to:

ptr[1]

and indexes for arrays are integers so language does not define operations on pointers with floating point operands as that does not make any sense.

Upvotes: 0

ForceBru
ForceBru

Reputation: 44926

You almost answered your question yourself: a pointer is a memory address. A memory address is an integer. You can add integers to integers and get integers as a result. Adding a float to an integer gives you a float, which cannot be used as a memory address.

For example, char *x = 0; is the address of a single byte; What would char *y = 0.5; mean? A byte that's somehow made up of the second half of the byte at address 0 and the first half of the byte at address 1?? This may make sense, but what about char *x = 3.1415926; or any similar floating-point number??

Upvotes: 1

Related Questions