Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > returning function pointer

Reply
Thread Tools

returning function pointer

 
 
Pradyut Bhattacharya
Guest
Posts: n/a
 
      06-26-2007
Hi,
in this program i cannot retrive the values from the pointer j....
The code :-

--------------------------------------------------------------------------------------------------------------

#include <stdio.h>

void func(int [], int);
int*func2();

void main()
{
int a[] = {3,2,4};

int*j[8];
int i;

func(a, 2);

*j = func2();
printf("\nTraversing second list\n");

printf("\n%d", *j);

}

void func(int a[], int size)
{
int i=0;
for (i=0; i<=size; i++)
printf("%d\n", a[i]);
}

int*func2()
{

int b[] = {112,3,4,5,6,7,9,4,10};

return *b;
}

-------------------------------------------------------------------------------------------------------------

Any help

Thanks
Pradyut
http://pradyut.tk
India


 
Reply With Quote
 
 
 
 
Default User
Guest
Posts: n/a
 
      06-26-2007
Pradyut Bhattacharya wrote:

> Hi,
> in this program i cannot retrive the values from the pointer j....
> The code :-
>
> ----------------------------------------------------------------------
> ----------------------------------------
>
> #include <stdio.h>
>
> void func(int [], int);
> int*func2();
>
> void main()


main() returns int ALWAYS.

> {
> int a[] = {3,2,4};
>
> int*j[8];
> int i;
>
> func(a, 2);


The number of elements in your array is three. Why pass two?

>
> *j = func2();
> printf("\nTraversing second list\n");
>
> printf("\n%d", *j);


You're obviously not traversing, but accessing the first element.

>
> }
>
> void func(int a[], int size)
> {
> int i=0;
> for (i=0; i<=size; i++)


Change that to i < size

> printf("%d\n", a[i]);
> }
>
> int*func2()
> {
>
> int b[] = {112,3,4,5,6,7,9,4,10};
>
> return *b;


Yikes. You pass back an int from a function that's supposed to be
returning an int *. Presumbably you meant to type:

return b;

However, that's not right either. b is a local array, you can NOT use
it outside of its scope, which happens to be the function func2().

You'll either have to dynamically allocate an array and populate it, or
make b static.


> Any help


Turn up the warning level on your compiler.




Brian
 
Reply With Quote
 
 
 
 
pete
Guest
Posts: n/a
 
      06-26-2007
Default User wrote:
>
> Pradyut Bhattacharya wrote:
>
> > Hi,
> > in this program i cannot retrive the values from the pointer j....
> > The code :-
> >
> > ----------------------------------------------------------------------
> > ----------------------------------------
> >
> > #include <stdio.h>
> >
> > void func(int [], int);
> > int*func2();
> >
> > void main()

>
> main() returns int ALWAYS.
>
> > {
> > int a[] = {3,2,4};
> >
> > int*j[8];
> > int i;
> >
> > func(a, 2);

>
> The number of elements in your array is three. Why pass two?
>
> >
> > *j = func2();
> > printf("\nTraversing second list\n");
> >
> > printf("\n%d", *j);

>
> You're obviously not traversing, but accessing the first element.
>
> >
> > }
> >
> > void func(int a[], int size)
> > {
> > int i=0;
> > for (i=0; i<=size; i++)

>
> Change that to i < size
>
> > printf("%d\n", a[i]);
> > }
> >
> > int*func2()
> > {
> >
> > int b[] = {112,3,4,5,6,7,9,4,10};
> >
> > return *b;

>
> Yikes. You pass back an int from a function that's supposed to be
> returning an int *. Presumbably you meant to type:
>
> return b;
>
> However, that's not right either. b is a local array, you can NOT use
> it outside of its scope, which happens to be the function func2().
>
> You'll either have to dynamically allocate an array
> and populate it, or make b static.
>
> > Any help

>
> Turn up the warning level on your compiler.



/* BEGIN new.c */

#include <stdio.h>

#define NINE 9

void func(int a[], int size);
int *func2(void);

int main(void)
{
int a[] = {3,2,4};
int *(*j)(void) = func2;

func(a, sizeof a / sizeof *a);
printf("\nTraversing second list\n");
func(j(), NINE);
return 0;
}

void func(int a[], int size)
{
int i;

for (i = 0; size > i; i++) {
printf("%d\n", a[i]);
}
}

int *func2(void)
{
static int b[NINE] = {112,3,4,5,6,7,9,4,10};

return b;
}

/* END new.c */


--
pete
 
Reply With Quote
 
Default User
Guest
Posts: n/a
 
      06-26-2007
Default User wrote:

> Pradyut Bhattacharya wrote:
>
> > Hi,
> > in this program i cannot retrive the values from the pointer
> > j.... The code :-
> >
> > --------------------------------------------------------------------
> > -- ----------------------------------------
> >
> > #include <stdio.h>
> >
> > void func(int [], int);
> > int*func2();
> >
> > void main()

>
> main() returns int ALWAYS.
>
> > {
> > int a[] = {3,2,4};
> >
> > int*j[8];
> > int i;
> >
> > func(a, 2);

>
> The number of elements in your array is three. Why pass two?
>
> >
> > *j = func2();

>
> > printf("\nTraversing second list\n");
> >
> > printf("\n%d", *j);



Oops, I just noticed that you are printing an int pointer as if it were
an int. Yet another mistake. j is an array of int pointers. Possibly
you wanted it to be just an int pointer, which would make the printf ok.




Brian
 
Reply With Quote
 
Default User
Guest
Posts: n/a
 
      06-26-2007
pete wrote:

> void func(int a[], int size);
> int *func2(void);
>
> int main(void)
> {
> int a[] = {3,2,4};
> int *(*j)(void) = func2;
>
> func(a, sizeof a / sizeof *a);
> printf("\nTraversing second list\n");
> func(j(), NINE);
> return 0;
> }


Hmmm, points for working part of the subject into the solution, but the
OP said RETURNING function pointer.




Brian
 
Reply With Quote
 
pete
Guest
Posts: n/a
 
      06-26-2007
Default User wrote:
>
> pete wrote:
>
> > void func(int a[], int size);
> > int *func2(void);
> >
> > int main(void)
> > {
> > int a[] = {3,2,4};
> > int *(*j)(void) = func2;
> >
> > func(a, sizeof a / sizeof *a);
> > printf("\nTraversing second list\n");
> > func(j(), NINE);
> > return 0;
> > }

>
> Hmmm, points for working part of the subject into the solution,
> but the OP said RETURNING function pointer.


I think I did better than that.

OP said "cannot retrive the values from the pointer j"
I made j into a function pointer.
I used the return value from a function call made through j
to access nine values.
And that's how I got OP's original line of code:
printf("\nTraversing second list\n");
to say what it means.

--
pete
 
Reply With Quote
 
Mark McIntyre
Guest
Posts: n/a
 
      06-26-2007
On Wed, 27 Jun 2007 02:17:16 +0530, in comp.lang.c , "Pradyut
Bhattacharya" <(E-Mail Removed)> wrote:

>int*func2();


funct returns a pointer to an int...

> int*j[8];


j is an array of pointers to ints. I don't think you wanted that...

> *j = func2();


you set the first pointer in j to whatever func2 returns.

> int b[] = {112,3,4,5,6,7,9,4,10};


b is a local array which is discarded when func2 returns.

> return *b;


*b is the value of the first element ie 112,

But your function is expecting a /pointer/ to an int. You should
hopefully get a warning here. If not, turn up warning levels. You have
set j[0] to point to the 112th byte of your computer's memory, which
is probably protected ROM space or something...


I presume you want return an array from a function. You can't do that
(easily). Pass the array as an argument.
--
Mark McIntyre

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it."
--Brian Kernighan
 
Reply With Quote
 
Default User
Guest
Posts: n/a
 
      06-26-2007
pete wrote:

> Default User wrote:
> >
> > pete wrote:
> >
> > > void func(int a[], int size);
> > > int *func2(void);
> > >
> > > int main(void)
> > > {
> > > int a[] = {3,2,4};
> > > int *(*j)(void) = func2;
> > >
> > > func(a, sizeof a / sizeof *a);
> > > printf("\nTraversing second list\n");
> > > func(j(), NINE);
> > > return 0;
> > > }

> >
> > Hmmm, points for working part of the subject into the solution,
> > but the OP said RETURNING function pointer.

>
> I think I did better than that.
>
> OP said "cannot retrive the values from the pointer j"
> I made j into a function pointer.
> I used the return value from a function call made through j
> to access nine values.
> And that's how I got OP's original line of code:
> printf("\nTraversing second list\n");
> to say what it means.


Ok, that's not bad.



Brian
 
Reply With Quote
 
Martin Ambuhl
Guest
Posts: n/a
 
      06-26-2007
Pradyut Bhattacharya wrote:
> Hi,
> in this program i cannot retrive the values from the pointer j....


We won't bother discussing absurdities of
> void main()

If you don't know better by now, since you have done as any civilized
person would and followed the newsgroup and checked the FAQ before
posting, you never will.

The answer to your stated problem is simple. There is no "the pointer j".
You have declared j with
> int*j[8];

So j is an array[8] of pointers to int.
 
Reply With Quote
 
!truth
Guest
Posts: n/a
 
      06-27-2007
On 6 27 , 4 47 , "Pradyut Bhattacharya" <(E-Mail Removed)> wrote:
> Hi,
> in this program i cannot retrive the values from the pointer j....
> The code :-
>
> ---------------------------------------------------------------------------*-----------------------------------
>
> #include <stdio.h>
>
> void func(int [], int);
> int*func2();
>
> void main()
> {
> int a[] = {3,2,4};
>
> int*j[8];
> int i;
>
> func(a, 2);
>
> *j = func2();
> printf("\nTraversing second list\n");
>
> printf("\n%d", *j);
>
> }
>
> void func(int a[], int size)
> {
> int i=0;
> for (i=0; i<=size; i++)
> printf("%d\n", a[i]);
>
> }
>
> int*func2()
> {
>
> int b[] = {112,3,4,5,6,7,9,4,10};
>
> return *b;
>
> }
>
> ---------------------------------------------------------------------------*----------------------------------
>
> Any help
>
> Thanks
> Pradyuthttp://pradyut.tk
> India


It not wise to return a pointer which points to the static.
But if you still want to do so, try to remove the line:
printf("\nTraversing second list\n");

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Declaring static function returning pointer to extern function pembed2012 C Programming 1 02-27-2012 08:21 PM
function returning function pointer (recursive type) Mark Piffer C Programming 9 05-15-2009 07:54 AM
Function returning a function pointer? Protoman C++ 14 12-11-2005 07:11 PM
pointer to member function and pointer to constant member function Fraser Ross C++ 4 08-14-2004 06:00 PM
function pointer and member function pointer question glen stark C++ 2 10-10-2003 01:41 PM



Advertisments