How to work with pointer to pointer to structure in C?
Asked Answered
M

4

18

I want to change member of structure under double pointer. Do you know how?

Example code

typedef struct {
    int member;
} Ttype;

void changeMember(Ttype **foo) {
   //I don`t know how to do it
   //maybe
   *foo->member = 1;
}
Manzano answered 6/12, 2008 at 20:28 Comment(0)
H
33

Try

(*foo)->member = 1;

You need to explicitly use the * first. Otherwise it's an attempt to dereference member.

Hyman answered 6/12, 2008 at 20:33 Comment(3)
A doubt example: if the changeMember() funtion is created in a class library and I need to access this in my console app ,how it should be done?? : @Jonathan LefflerAspergillosis
@TechBrkTru: Given that this is C, I'm not sure what you mean by a 'class library'. However, if you mean 'library', then you simply make sure you've got a header with the necessary function declarations in use in the code that needs to call changeMember(), and you link the executable with the library that contains the function. That's all completely routine. If you mean something else, you should probably ask your own new question so you can explain properly.Animate
@Hyman Why would we need a pointer to structure pointer to be able to change the member of the structure (is not a pointer enough to do that ?)Agora
S
10

Due to operator precedence, you need to put parentheses around this:

(*foo)->member = 1;
Sprayberry answered 6/12, 2008 at 20:34 Comment(0)
F
3

You can use a temp variable to improve readability. For example:

Ttype *temp = *foo;
temp->member = 1;

If you have control of this and allowed to use C++, the better way is to use reference. For example:

void changeMember(Ttype *&foo) {
   foo->member = 1;
}
Foreshow answered 6/12, 2008 at 20:59 Comment(0)
S
1

maybe (*foo)->member = 1 (if it's dynamically allocated)

Streamway answered 6/12, 2008 at 20:33 Comment(1)
No maybe - but dynamic allocation is immaterial.Animate

© 2022 - 2024 — McMap. All rights reserved.