Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Addition of two pointers in c or c++ not supported. why?

Tags:

c++

c

pointers

Why addition of two pointers not supported in c or c++.

When I do,

int *ptr,*ptr1;
int sum = ptr + ptr1;

C or C++ throws an error. While it supports,

int diff = ptr - ptr1;
like image 344
vignesh babu Avatar asked Sep 04 '14 14:09

vignesh babu


People also ask

Can two pointers be added in C?

Adding two pointers is illegal in c program but pointer and integer addition is legal. subtraction of two pointers is also legal. multiplication & division of two pointers are also illegal.

Why pointers are not used in C?

The reason is that pointers are used to bodge into C some vital features which are missing from the original language: arrays, strings, & writeable function parameters.

Why addition and multiplication of two address is not possible in pointers?

If we perform addition, multiplication, division or modulus on ptr_1 and ptr_2, then the resultant address may or may not be a valid address. That can be out of range or invalid address. This is the reason compiler doesn't allow these operations on valid addresses.

Can 2 pointers be added or multiplied or divided?

It multiplies or divides the pointed at values, and the pointed at values are not pointers, so multiplication and division is fine. You can't add pointers, either; you can only subtract pointers.


1 Answers

Pointers contain addresses. Adding two addresses makes no sense, because you have no idea what you would point to. Subtracting two addresses lets you compute the offset between these two addresses, which may be very useful in some situations.

Edit: To address the common wish for finding the mid consider this (purely as an example):

#include <stdio.h>
int main (int argc, char **argv){
    int arr[] = {0,1,2,3,4,5,6,7,8,9};
    int *ptr_begin = arr;
    int *ptr_end = &arr[9];
    int *ptr_mid = ptr_begin + (ptr_end - ptr_begin)/2;
    printf("%d\n", *ptr_mid);
}

I am quite sure that you can always come up with an offset-computation which lets do what you want to achieve with addition.

like image 136
midor Avatar answered Sep 18 '22 14:09

midor