2011-01-21 58 views
1

我在編寫一個函數時遇到了麻煩,該函數將指針指向全局嵌套結構的地址。 但我想這是在一個函數內完成的,而不是在主 請幫我寫這個函數。在此先感謝函數指向全局嵌套結構

#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; 
} 

上述功能並不能反映全球嵌套結構的確切地址,我已經把打印驗證。在PointNestedStructToPointer()在進行分配時,請幫

+0

你期望的目的地所經歷的變量指向全球價值之後,還是隻保留當前值? – 2011-01-21 02:46:30

+0

@Chris OP表示他希望通過他的函數調用來模仿`pcode_krish =&Global_Sam.krish`(註釋掉的行)。 – chrisaycock 2011-01-21 02:52:15

回答

2

如果你想的

dst = &src; 

在函數裏,相當於你有兩個選擇:

  1. 通過指針012的地址的功能:

    void doit(code **p) 
    { 
        *p = &src; 
    } 
    
    // later 
    doit(&pcode_krish); 
    
  2. 返回從函數的指針和做作業自己:

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