Skip to content
Related Articles

Related Articles

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

View Discussion
Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 09 Sep, 2021
View Discussion
Improve Article
Save Article

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!