функция для указания на глобальную вложенную структуру - PullRequest
1 голос
/ 21 января 2011

У меня проблемы с написанием функции, которая назначает указатель на адрес глобальной вложенной структуры.Но я бы хотел, чтобы это было сделано внутри функции, а не с помощью main. Пожалуйста, помогите мне написать функцию.Заранее спасибо

#include "stdio.h"

typedef struct
{
    int c;
}code;

typedef code* p_code ;

typedef struct
{
    char a;
    int b;
    code krish; 
}emp;

emp Global_Sam;

int main()
{
    code tmpcode_krish; 
    code* pcode_krish;

    pcode_krish = &tmpcode_krish;

    printf("Goal %p  %p \r\n ", &(Global_Sam.krish), &(Global_Sam).krish);
    memset(pcode_krish, 0 , sizeof( code));
   // pcode_krish = &Global_Sam.krish;

    PointNestedStructToPointer(&pcode_krish);
    printf("Goal=> both should be same => %p  %p \r\n ", &(Global_Sam.krish), pcode_krish);
    return 0;
}

Здесь => pcode_krish = &Global_Sam.krish; это будет указывать на глобальную вложенную структуру.Но мне нужно сделать это внутри функции, следовательно, функция, PointNestedStructToPointer

void PointNestedStructToPointer(p_code *dst )
{
    dst = &Global_Sam.krish;
}

Вышеприведенная функция не отражает точный адрес глобальной вложенной структуры, я поставил отпечатки проверенными.Пожалуйста, помогите

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Если вы хотите получить эквивалент

dst = &src;

Внутри функции у вас есть две опции:

  1. Передать адрес указателя к функции:

    void doit(code **p)
    {
        *p = &src;
    }
    
    // later
    doit(&pcode_krish);
    
  2. Вернуть указатель из функции и выполнить присвоение самостоятельно:

    code *doit(void)
    {
        return &src;
    }
    
    // later
    pcode_krish = doit();
    
1 голос
/ 21 января 2011

Разыменование dst при выполнении присваивания в PointNestedStructToPointer():

*dst = &Global_Sam.krish;
...