Open In App

Why only subtraction of addresses allowed and not division/addition/multiplication

Why Subtraction is allowed? Two addresses can be subtracted because the memory between the two addresses will be valid memory. 
Let’s assume memory Ptr_1 and ptr_2 valid addresses. It is obvious that memory between these two addresses is valid. 
Pointer ptr_1 is pointing to 0x1cb0010 memory location and ptr_2 is pointing to 0x1cb0030 memory location. If we subtract ptr_1 from ptr_2, then the Memory region will lie in between these two location which is obviously a valid memory location.
 




// C++ program to demonstrate that pointer
// subtraction is allowed.
#include <iostream>
using namespace std;
 
int main()
{
    int* ptr_1 = (int*)malloc(sizeof(int));
    int* ptr_2 = (int*)malloc(sizeof(int));
    cout << "ptr_1:" << ptr_1 <<  " ptr_2: "<< ptr_2 << endl;
    cout << "Difference: "<< ptr_2 - ptr_1;
    free(ptr_1);
    free(ptr_2);
    return 0;
}
 
 
// This code is contributed by shivanisinghss2110.




// C program to demonstrate that pointer
// subtraction is allowed.
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* ptr_1 = (int*)malloc(sizeof(int));
    int* ptr_2 = (int*)malloc(sizeof(int));
    printf("ptr_1: %p  ptr_2: %p\n", ptr_1, ptr_2);
    printf("Difference: %lu", ptr_2 - ptr_1);
    free(ptr_1);
    free(ptr_2);
    return 0;
}

Output:
ptr_1: 0x1cb0010 ptr_2: 0x1cb0030
Difference: 8

Why addition, Multiplication, division or modulus is not allowed?? 
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.
 




// C++ program to demonstrate addition / division
// / multiplication not allowed on pointers.
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int* ptr_1 = (int*)malloc(sizeof(int));
    int* ptr_2 = (int*)malloc(sizeof(int));
    cout <<"addition:%lu multipicaion:%lu division:%lu\n"<<
           ptr_2 + ptr_1<< ptr_2 * ptr_1<< ptr_2 / ptr_1;
    free(ptr_1);
    free(ptr_2);
    return 0;
}
 
// This code is contributed by shivanisinghss2110




// C program to demonstrate addition / division
// / multiplication not allowed on pointers.
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* ptr_1 = (int*)malloc(sizeof(int));
    int* ptr_2 = (int*)malloc(sizeof(int));
    printf("addition:%lu multipicaion:%lu division:%lu\n",
           ptr_2 + ptr_1, ptr_2 * ptr_1, ptr_2 / ptr_1);
    free(ptr_1);
    free(ptr_2);
    return 0;
}

Output: prog.c: In function 'main':
prog.c:8:60: error: invalid operands to 
binary + (have 'int *' and 'int *')
printf("addition:%lu multipicaion:%lu 
division:%lu\n", ptr_2+ptr_1, ptr_2*ptr_1,
ptr_2/ptr_1);

Article Tags :