Swapping two nos. by the use of pointers.
int main()
{
int *a;
int *b;
a = 3;
b = 5;
*a=b;
*b=a;
printf("a=%d\n b=%d\n", *a, *b);
It is showing Segmentation fault at line "*a=b(7)"
I tried to introduce a new variable and assign it to *a and *b but it still shows the same error.
CodePudding user response:
The compilation error you are getting seems pretty descriptive. "assigment to 'int*' from 'int' makes pointer from integer without a cast." indicates that you are trying to assign an int
to an int *
, which is precisely what you are trying in the line a = 3
. If a
were set to the address of an int
, you could assign to it with *a = 3
, and you could initialize a
with something like int x; int *a = &x;
, but writing a = 3
is attempting to assign an int
to an int *
, which the compiler warns you about.
You are probably looking for something like:
#include <stdio.h>
int
main(void)
{
int a, b;
int *ap = &a;
int *bp = &b;
a = 3;
b = 5;
printf("a=%d b=%d\n", a, b);
int tmp = a;
*ap = b;
*bp = tmp;
printf("a=%d b=%d\n", a, b);
}
CodePudding user response:
A pointer is a data type that "points" to a memory address, so for example if you have int x = 12
, you can set int *p = x
, and p is a pointer to the memory value of x (where x is stored in the computer). You set your pointers to constant integers, which doesn't make much sense. The other problem is the *
, which is confusing when you are new to pointers. The *
is how you initialize pointers, which you used correctly. The other use of *
is to dereference a pointer. In the previous example, pointer p
points to x
's memory address. If we dereference p
, then p is set to the value of whatever is at the memory address of x
, in this case, 12. If you don't want to dereference a pointer (set the pointer to the value which it is pointing at), then don't use the *
. If you want to point a pointer to another pointer, you have to initialize the pointer as **
.