Sponsored Content
Top Forums Programming pass a pointer-to-pointer, or return a pointer? Post 302273937 by redoubtable on Tuesday 6th of January 2009 09:04:53 AM
Old 01-06-2009
The actual difference is that the first example copies the address of your pmem pointer to the stack and the second example doesn't. The second example only works because you're using malloc() which allocates memory from the heap, otherwise you could have unexpected behavior because you would be returning a local variable (which is cleared upon function completion).

IMHO the second option would be faster because there's one less parameter to be copied to the stack and there's no desreferencing of the pointer's address to obtain the data. Anyway, you should feel no significant speed difference in any of the alternatives.
 

10 More Discussions You Might Find Interesting

1. Programming

pointer

void main() { int a={1,2,3,4,5,6,7,8,9,10}; int *p=a; int *q=&a; cout<<q-p+1<<endl; } The output is 10, how? if we give cout<<q it will print the address, value won't print.... if we give cout<<p it will print the address, value won't print.... p has the base addr; q... (1 Reply)
Discussion started by: sarwan
1 Replies

2. Programming

Regarding char Pointer

Hi, char *s="yamaha"; cout<<s<<endl; int *p; int i=10; p=&i; cout<<p<<endl; 1) For the 1st "cout" we will get "yamaha" as output. That is we are getting "content of the address" for cout<<s. 2) But for integer "cout<<p" we are getting the "address only". Please clarify how we are... (2 Replies)
Discussion started by: sweta
2 Replies

3. Programming

pointer problem

could any one tell why the following is showing segmentation fault while using **ptr but working fine using **a #include<stdio.h> ... (1 Reply)
Discussion started by: useless79
1 Replies

4. Programming

far pointer

what is far pointer in C (1 Reply)
Discussion started by: useless79
1 Replies

5. Programming

How to return void function pointer

Hello all im trying to build function that will return void function pointer what is mean is ( not working ) the main function void * myClass::getFunction(int type){ if(type==1) return &myClass::Test1; if(type==2) return &myClass::Test2; } void myClass::Test1(){... (1 Reply)
Discussion started by: umen
1 Replies

6. Programming

matrix pointer

Can anyone tell me what the following statements do? float (*tab); tab=(float (*)) calloc(MAXCLASS, (MAXCLASS+1)*sizeof(float)); (3 Replies)
Discussion started by: littleboyblu
3 Replies

7. Programming

Pointer Arithmetic In C

I have a fundamental question on C pointer arithmetry.. Suppose i have a c string pointer already pointing to a valid location, Can I just do a charptr = charptr +1; to get to the next location, irregardless if my program is 32 or 64 bits? or should i do it this way: charptr =... (1 Reply)
Discussion started by: Leion
1 Replies

8. Programming

Pointer to pointers

Hi guys, I'm trying to understand pointers in C and made a simple example and I've problems with It. Can someone help? #include <stdio.h> #include <stdlib.h> #include <assert.h> int f1(char **str_); int main(int argc, char **argv) { char *str = NULL; f1(&str); ... (3 Replies)
Discussion started by: pharaoh
3 Replies

9. Programming

Pointer for 2D array seems to be 3D in C

I am struggling with the pointer to 2D-array (cf: 2D array of pointers). Can anybody help me elaborate how the pointer x moves in the memory to access the individual of y, especially the high lighted lines? I have talked to one of the curators of the forum, but I am still not quite clear. Here... (1 Reply)
Discussion started by: yifangt
1 Replies

10. Programming

Segmentation fault when I pass a char pointer to a function in C.

I am passing a char* to the function "reverse" and when I execute it with gdb I get: Program received signal SIGSEGV, Segmentation fault. 0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72 72 *q = *p; Attached is the source code. I do not understand why... (9 Replies)
Discussion started by: jose_spain
9 Replies
JudyHS_funcs(3) 					     Library Functions Manual						   JudyHS_funcs(3)

NAME
JudyHS functions - C library for creating and accessing a dynamic array, using an array-of-bytes of a length: Length as an Index and a word as a Value. SYNOPSIS
PPvoid_t JudyHSIns(PPvoid_t PPJHS, void *Index, Word_t Length, PJError_t PJError); int JudyHSDel(PPvoid_t PPJHS, void *Index, Word_t Length, PJError_t PJError); PPvoid_t JudyHSGet(Pcvoid_t PJHS, void *Index, Word_t Length, PJError_t PJError); Word_t JudyHSFreeArray(PPvoid_t PPJHS, PJError_t PJError); DESCRIPTION
A macro equivalent exists for each function call. Because the macro forms are sometimes faster and have a simpler error handling interface than the equivalent functions, they are the preferred way of calling the JudyHS functions. See JudyHS(3) for more information. The func- tion call definitions are included here for completeness. One of the difficulties in using the JudyHS function calls lies in determining whether to pass a pointer or the address of a pointer. Since the functions that modify the JudyHS array must also modify the pointer to the JudyHS array, you must pass the address of the pointer rather than the pointer itself. This often leads to hard-to-debug programmatic errors. In practice, the macros allow the compiler to catch programming errors when pointers instead of addresses of pointers are passed. The JudyHS function calls have an additional parameter beyond those specified in the macro calls. This parameter is either a pointer to an error structure, or NULL (in which case the error information is not returned -- only PJERR in the return parameter). In the following descriptions, the functions are described in terms of how the macros use them. This is the suggested use of the macros after your program has been fully debugged. When the JUDYERROR_NOTEST macro is not specified, an error structure is declared to store error information returned from the JudyHS functions when an error occurs. Notice the placement of the & in the different functions. JudyHSIns(&PJHS, Index, Length, &JError) #define JHSI(PValue, PJHS, Index) PValue = JudyLIns(&PJHS, Index, PJE0) JudyHSDel(&PJHS, Index, Length, &JError) #define JHSD(Rc_int, PJHS, Index, Length) Rc_int = JudyHSDel(&PJHS, Index, Length, PJE0) JudyHSGet(PJHS, Index, Length) #define JHSG(PValue, PJHS, Index, Length) PValue = JudyHSIns(PJHS, Index, Length) JudyHSFreeArray(&PJHS, &JError) #define JHSFA(Rc_word, PJHS) Rc_word = JudyHSFreeArray(&PJHS, PJE0) Definitions for all the Judy functions, the types Pvoid_t, Pcvoid_t, PPvoid_t, Word_t , JError_t, and PJError_t, the constants NULL, JU_ERRNO_*, JERR, PPJERR, and PJE0 are provided in the Judy.h header file (/usr/include/Judy.h). Note: Callers should define JudyHS arrays as type Pvoid_t, which can be passed by value to functions that take Pcvoid_t (constant Pvoid_t), and also by address to functions that take PPvoid_t. The return type from most JudyHS functions is PPvoid_t so that the values stored in the array can be pointers to other objects, which is a typical usage, or cast to a Word_t * when a pointer to a value is required instead of a pointer to a pointer. AUTHOR
JudyHS was invented and implemented by Doug Baskins after retiring from Hewlett-Packard. SEE ALSO
Judy(3), Judy1(3), JudyL(3), JudySL(3), JudyHS(3), malloc(), the Judy website, http://judy.sourceforge.net, for more information and Application Notes. JudyHS_funcs(3)
All times are GMT -4. The time now is 04:43 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy