函数指向全局嵌套结构

时间:2011-01-21 02:30:14

标签: c pointers prototype nested

我在编写一个函数时遇到了麻烦,该函数指定了指向全局嵌套结构地址的指针。 但我希望在一个函数内部完成,而不是在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 个答案:

答案 0 :(得分:2)

如果你想要相当于

dst = &src;

在一个功能中你有两个选择:

  1. 将指针的地址传递给函数:

    void doit(code **p)
    {
        *p = &src;
    }
    
    // later
    doit(&pcode_krish);
    
  2. 从函数返回指针并自行完成任务:

    code *doit(void)
    {
        return &src;
    }
    
    // later
    pcode_krish = doit();
    

答案 1 :(得分:1)

dst中进行作业时取消引用PointNestedStructToPointer()

*dst = &Global_Sam.krish;