1

I am new to the pointer in c, I have done the following simple array programme using the pointer.

#include<stdio.h>
void disp(int *);
void show(int a);

int main()
{
    int i;
    int marks[]={55,65,75,56,78,78,90};
    for(i=0;i<7;i++)
        disp(&marks[i]);
    return 0;
}
void disp(int *n)
{
    show((int) &n);
}
void show(int a)
{
    printf("%d",*(&a));
}

I want to get all these values that are stored in the array as output but I only get the memory number of these stored value in the array. plz, help me how to get the array values as output.

2
  • Casting int* to int but why? And *&a will try to print the address, Commented Feb 17, 2018 at 17:04
  • you mean i<7 to print all the members Commented Feb 17, 2018 at 17:28

4 Answers 4

1

I guess you want to play with pointers.

Please note that void show(int a) expects int value. Therefor you do not have to do anything to a to print it. *(&a) is equivalent to a. &a gets the address of a and * dereference the pointer.

Of course it is possible that pointer entering disp(int *n) is passed down the road and dereferenced later. This is ilustrated by calling show1 function inside disp.

#include <stdio.h>
#include <string.h>

void disp(int *);  //  function disp receives the address on int value 

void show(int a);
void show1(int *a); // function show1 will receive the address of n

int main()
{
    int i;
    int marks[]={55,65,75,56,78,78,90};

    for(i=0;i<7;i++)  // 7 since you want to print all elements

        disp( &marks[i] );

    return 0;
}

void disp(int *n)
{
    show(*n); // show expects the 'int' value therefore we have to dereference the pointer. 
    show1(n); // function show1 will receive the address of n and will dereference the pointer inside the function
}

void show(int a)
{
    printf("%d ",a);
}

void show1(int *n) // show1 gives the output of the value that is stored in address n
{
    printf("%d\n",*n);  // dereference the address n to print the value
}

Output:

55 55
65 65
75 75
56 56
78 78
78 78
90 90
Sign up to request clarification or add additional context in comments.

2 Comments

But I want to send the address of n to function show and function show will receive the address of n and give the output of the value that is stored in address n @sg7
@SourodipKundu Sure, you can do that. I have added show1 which will take a pointer and it will dereference it for printing.
0

& always gives you the memory address of the variable. So &n is giving you the memory address of the variable n.

If you want the value of a pointer, use *. To get the value stored by the pointer n, you want to use (int)*n. Of course you don't need the cast at all, just *n.

I recommend going over some tutorials in C/C++ pointer basics. Pointers are a basic skill you want to have a solid foundation of.

Comments

0

If you just wanted to print all the elements of that array, you just need to do

for(i=0;i<7;i++)
    printf("%d", marks[i]))

Note that there are 7 elements in marks, the exit condition in the loop should be either i<7 or i<=6 and not i<6.


You are sending the address of a variable to the function disp() as n.

The n in disp() acts similar to a local variable of that function except that it gets its value from the function calling it.

So n is stored somewhere in the memory and hence has an address. This address is what you get when you do &n. So what you see is probably meaningless (because they are allocated on stack memory).

You do an explicit type cast to int on this address with (int) &n whose value you then pass to show(). Read about explicit type casting here.

In show(), you first take the address of a with &a and then find the value in that address with    *(&a) which is the same thing as a (think along the lines of -(-a) ie, taking the negative of a number whose negative is in turn found which is the same number you started off with).

Comments

0

&--> get me the address.

*--> get me the value at that address

disp(&marks[i])--> get the address of variable "marks[i]" and pass it to *n(disp(int *n)), so that when *n is executed it will get the value at the address it has been assigned.

show((int) &n)--> get address of the variable that stores the address of the variable marks[i].

To make it work as intended, it must be show(*n)--> pass the value at the address pointed to by n. (Typecasting is not needed as you're passing an int value to show())

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.