Du veränderst die lokale Kopie Deines Pointers (call by value).
1 | void ProcessMenuList(MenueItem *ItemList, MenueItem **SelItem)//, unKeys)
|
2 | {
|
3 | //Select next Item
|
4 | if(get_key_press(DOWN))
|
5 | {
|
6 | (*SelItem)->flags &= ~(SELECTED); //Delete flag from actual item
|
7 |
|
8 | *SelItem = (*SelItem)->next; //Zeiger manipulieren, Zeile wird nicht übernommen bzw. bei neum Aufruf nich erkennbar
|
9 |
|
10 | while((((*SelItem)->flags) & SELECTABLE) == 0)
|
11 | {
|
12 | *SelItem = (*SelItem)->next;
|
13 | }
|
14 |
|
15 | (*SelItem)->flags = (*SelItem)->flags | (SELECTED); //Set new Selected Item as SELECTED
|
16 |
|
17 |
|
18 | DrawMenuList(ItemList); //Zeichne die aktuelle Menüliste
|
19 | }
|
20 | }
|
21 |
|
22 | ProcessMenuList(myMenue, &selectedItem);
|
Unter C++ lässt sich Folgendes kompilieren und gibt yz aus:
1 | #include <stdio.h>
|
2 |
|
3 | void x( char * &y )
|
4 | {
|
5 | y++;
|
6 | }
|
7 |
|
8 | int main(void )
|
9 | {
|
10 | char *p = "xyz";
|
11 |
|
12 | x(p);
|
13 | printf("%s\n", p);
|
14 | }
|
EDIT: Ich hatte oben ein paar Klammern vergessen.
Zur Vollständigkeit mein Bsp noch als C-Version:
1 | #include <stdio.h>
|
2 |
|
3 | void x( char **y )
|
4 | {
|
5 | (*y)++;
|
6 | }
|
7 |
|
8 | int main(void )
|
9 | {
|
10 | char *p = "xyz";
|
11 |
|
12 | x(&p);
|
13 | printf("%s\n", p);
|
14 | }
|