सबसे पहले, मैं यह कहना चाहूंगा कि मैंने इस प्रश्न को पोस्ट करने से पहले इस मंच में उत्तर की खोज की है, लेकिन मुझे कोई जवाब नहीं मिला।किसी फ़ंक्शन में एक सूचक के रूप में एक स्ट्रक्चर सदस्य को पास करने के लिए
ठीक है, समस्या यह है कि मेरे पास एक संरचना है जो किसी अन्य (प्रमुख) संरचना का सदस्य है। मैंने पहली संरचना को साफ़ करने के लिए एक फ़ंक्शन लिखा है (यह संरचना के लिए एक सूचक लेता है)। मैं उस संरचना का उपयोग प्रमुख संरचना के अंदर संरचना को साफ़ करने के लिए करना चाहता हूं, लेकिन मुझे नहीं पता कि यह करने का सही तरीका क्या है। , तब
void clearCircularBuffer(volatile struct_circ_buff *circular_buffer)
{
int i=0;
for(i=0;i<TCP_RX_BUFFER+1;i++)
circular_buffer->data[i]=0;
circular_buffer->first=0;
circular_buffer->next=0;
}
मैं:
मैं एक संरचना, है के रूप में परिभाषित:
typedef struct
{
unsigned char next;
unsigned char first;
unsigned long data[TCP_RX_BUFFER+1];
}struct_circ_buff;
और यह स्पष्ट करने के लिए एक समारोह
बेहतर व्याख्या करने के लिए, यहाँ कुछ कोड है एक और संरचना है जिसमें struct_circ_buff:
typedef struct
{
volatile unsigned char sensorType;
volatile uint16_t sensorFlag;
volatile struct_circ_buff st_circular_buffer;
}struct_sens;
और मैं एक ऐसा फ़ंक्शन लिखना चाहता हूं जो ऊपर लिखा गया 'clearCircularBuffer' फ़ंक्शन का उपयोग करके इस संरचना को साफ़ करेगा। ऐसा कैसे किया जा सकता था?
void clear_sensors_struc (volatile struct_sens *sensors_struct)
{
sensors_struct->sensorFlag=0;
sensors_struct->tipoSensor=0;
//NOW, HOW CAN I USE clearCircularBuffer to clean sensors_struct->
//st_circular_buffer??
//this way compiles fine, but i don´t think it´s correct
clearCircularBuffer(&(sensors_struct->st_circular_buffer));
//this way wouldn´t even compile
clearCircularBuffer(sensors_struct->st_circular_buffer));
}
अंत में, मैं एक चर के रूप में घोषित किया है:
struct_sens struct_sensores[MAX_NUMBER_OF_SENSORS];
और मैं एक समारोह है कि संरचनाओं की कि सरणी साफ होगा ... तो मैं कैसे 'clear_sensors_struc' इस्तेमाल कर सकते हैं लिखने के लिए चाहते हैं ऐसा करने के लिए काम करते हैं?
void clear_sensors_struc_array(struct_sens *sensors_struct)
{
struct_sens aux_str[MAX_NUMBER_OF_SENSORS];
int i=0;
for(i=0;i<MAX_NUMBER_OF_SENSORS;i++)
{
clear_sensors_struc(&aux_str[i]);
*(sensors_struct+i)=aux_str[i];
}
}
क्या कोई आंतरिक struct_sens aux_str को परिभाषित किए बिना ऐसा करने का कोई तरीका है?
ठीक है, उम्मीद है कि कोई मेरी मदद कर सकता है! अग्रिम धन्यवाद!
से अधिक वरीयता दी जाती है '// इस तरह से ठीक संकलित है, लेकिन मुझे लगता है कि नहीं है यह है correct' <- ठीक है, यह सही _is_। –
इससे मदद मिल सकती है: http://stackoverflow.com/questions/6851848/passing-struct-pointer-to-functions-not-working – R3D3vil
क्यों आप struct_circle_buf की बजाय struct_sens में (strcut_circle_buf *) पॉइंटर को सहेजते नहीं हैं। चीजें स्पष्ट हो जाती हैं। –