मैं सी में एक प्रोग्राम बना रहा हूं। मूल रूप से मेरे पास एक संरचना है जिसमें कुछ फ़ील्ड और पॉइंटर्स की एक सरणी है। प्रत्येक संरचना में एक सूचक सरणी होती है जो उनके बीच "कनेक्शन" बनाने वाली किसी अन्य संरचना को इंगित करती है। मैं उस फ़ील्ड का मान प्राप्त करने का प्रयास कर रहा हूं जो स्मृति पते पर संग्रहीत सूचक है जो उस पर इंगित कर रहा है।

मान लीजिए यह। मेरे पास मेमोरी में इनमें से दो नोड हैं। ए और बी। ए के पास ए के सरणी के अंदर एक सूचक है जो बी का संदर्भ है। इस सूचक को प्राप्त करने के लिए मुझे ऐसा कुछ करना होगा:

*temp_ptr = (*ptr).pointer_array[0]

यह सूचक पता *ptr प्राप्त करेगा और इसे *temp_ptr को दे देगा।

अब मैं जो सोच रहा हूं वह यह है। मैं यह कैसे कर सकता हूँ? जब मैं यह कोशिश करता हूं, तो मुझे "अभिव्यक्ति में संरचना या संघ प्रकार होना चाहिए"

जब मैं यह कोशिश करता हूं तो जावा कहें कि मैं यह कर सकता हूं

int variable = field[0].fieldIWantToGet

मुझे वांछित परिणाम मिलेगा।

यहां इच्छित व्यवहार को स्पष्ट करने के लिए एक छवि है जिसे मैं प्राप्त करने का प्रयास कर रहा हूं। व्यवहार का लिंक

जहां स्ट्रक्चर ए स्ट्रक्चर्स के "वैश्विक" संग्रह में है और इसमें पॉइंटर्स की एक सरणी है जो अन्य स्ट्रक्चर्स की ओर ले जाती है, जैसे बी

यहाँ मेरी परियोजना से कुछ कोड है।

#define GLOBAL_PTR_ARRAY_SIZE 10

Node* global_node_array[10];  

typedef struct Node{

unsigned char node_id;
int *ptr_array[10];
int ptr_array_size;


}Node;



void append_connection(short position, short destination) {   

    Node* position_ptr = global_node_array[position];        
    Node* destination_ptr = global_node_array[destination];

    if ((*position_ptr).ptr_array_size < GLOBAL_PTR_ARRAY_SIZE) {   
        int current_ptr_array_size = (*position_ptr).ptr_array_size;  

        (*position_ptr).ptr_array[current_ptr_array_size] = destination_ptr;

        (*position_ptr).ptr_array_size++;

}

void print_id(Node* ptr) {

    node* dptr = NULL;

    dptr = ptr->ptr_array[0];

    pptr = (int) (*ptr).ptr_array[0];

    fprintf(stdout, "%d connection to %d exists", (*ptr).node_id, dptr- 
   >node_id);      
}


int main(int argc, char const *argv[])
{
append_connection(0,1);
print_id(global_node_array[0]);

return 0;
}
0
Billtost 24 फरवरी 2019, 21:29

1 उत्तर

सबसे बढ़िया उत्तर

आपकी तस्वीर स्ट्रक्चर्स की सरणी दिखाती है न कि पॉइंटर्स। लेकिन नीचे दिया गया उदाहरण दोनों को कवर करता है।

struct a{
    int field1,field2;
}

struct b{
    struct a m[10];
}

struct c{
    struct a *m[10] 
}




   /* and usage */        
    struct c *x;
    struct b *y;

    x -> m[5].field1;
    y -> m[5] -> fileld1;
1
0___________ 24 फरवरी 2019, 18:46