Open In App

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

Last Updated : 09 Sep, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

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++




// 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




// 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++




// 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




// 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);


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads