Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 211
  • Last Modified:

pointer to an object that cant be modified indirectly

How would you define a pointer P that is initialized to point to the location of an int object i . The definition should make it illegal to modify the value of i indirectly through P .
0
plumcrazy
Asked:
plumcrazy
  • 3
1 Solution
 
Sys_ProgCommented:
int main()
{
      int i = 10 ;
      const int *p = &i ;
      *p = 20 ;
    system ( "PAUSE" ) ;
    return 0;
}


Amit
0
 
Sys_ProgCommented:
The line '*p = 20' in the above shown code gives an error saying a 'assignment to a const location'

The following code demostrates that u can't change i indirectyly thru P, however u can change i directly

int main()
{
      int i = 10 ;
      const int *p = &i ;
      cout << "i : " << i <<endl ;
      cout << "*p : " << *p <<endl;

      *p = 20 ;                                    // Syntax Error (Comment this for the program to run )
      i = 30 ;
      cout << "i : " << i <<endl;
      cout << "*p : " << *p <<endl;
    system ( "PAUSE" ) ;
    return 0;
}


Amit
0
 
Sys_ProgCommented:
There are two important thing regarding using const with pointers

Constant Pointer - A pointer which cannot point to some other location after being initialized to point to some location. However     the  value at which the pointer points can be changed

        int * const p = &i ;

Pointer to const - A pointer which can be made to point to some other location. However the value pointed to by the pointer cannot be changed

        int const *p = &i ;
        const int *p = &i ;

It's easy to distinguish/write the two
read from right to left
Thus, for first case above, "p is a const pointer to a integer"
and for second case above, "p is a pointer to a const integer" OR "p is a pointer to a integer const"


You can combine the above both to have a const pointer to a const integer

HTH

Amit





0
 
dennis_georgeCommented:
Hi,

I think if you want that nobody can change the value of int directly then declare it as

const int i = 10 ;

By this way even if you assign the address of int to a non constant pointer you will get a warning or error. (because you are advised to assign address of a const data type to a non const pointer) :: by const pointer I mean to say pointer to a constant location.

But if you only want that the pointer you declare should not change its value then Sys_prog is quite precise in his answer.

Dennis
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now