2013-09-06 29 views
7

मैं एक समारोह जो पंक्तियों और स्तंभों whoses तत्व के सूचकांक देता है लिखने के लिए कोशिश कर रहे हैं 0. है मैं एक समारोहसमारोह में पैरामीटर के रूप मैट्रिक्स पासिंग

void make_zero(int matrix[][],int row,int col) 
{ 
    int row, col; 
    int i,j; 

    for(i=0;i<row;i++) 
    { 
     for(j=0;j<col;j++) 
     { 
      if(matrix[i][j]==0){ 
       printf("%d %d\n", i, j); 
     } 

    } 
} 

उपयोग करने की कोशिश लेकिन यह संकलन के समय एक त्रुटि देता है "त्रुटि: सरणी प्रकार में अपूर्ण तत्व प्रकार है"। मैंने वैश्विक स्तर पर मैट्रिक्स घोषित करने और इसे एक सूचक देने की भी कोशिश की। लेकिन यह मेरे लिए काम नहीं करता है। मेरी मदद इस के साथ हम कैसे सी

+0

कृपया मैट्रिक्स घोषित/भरने वाला कोड पोस्ट करें। –

+0

आपको वास्तव में 'मैट्रिक्स [i] [j] 'की बजाय' i' और 'j' मुद्रित करने की आवश्यकता है; आप पहले से ही जानते हैं कि मान 0. –

उत्तर

5

अगर आप इस तरह int matrix[10][10]; घोषित इस

void make_zero(int row, int col, int matrix[row][col]) 
    { 
    int i,j; 
    for(i=0;i<row;i++) 
     for(j=0;j<col;j++) 
     { 
      if(matrix[i][j]==0) 
       printf("%d %d\n",i,j); 
     } 

    } 
+0

@ जोनाथन लेफ्लर है; क्या होगा यदि मैं 'शून्य मेक_जेरो (int col, int matrix [] [col]) का उपयोग करता हूं? – haccks

+0

यह तब तक काम करता है जब तक फ़ंक्शन जादुई रूप से जानता है कि प्रक्रिया करने के लिए कितनी पंक्तियां हैं। मैंने इसे ठीक किया है ताकि आप एक अनियमित चर का उपयोग नहीं कर रहे थे ... आपको ध्यान रखना चाहिए कि यह सी 99, वीएलए का उपयोग करता है, और आप लूप के लिए 'int (int i = 0; i

+0

@ जोनाथन लेफ्लर; मैंने पढ़ा है: * हमें एक बहुआयामी सरणी में कॉलम की संख्या निर्दिष्ट करनी होगी, हमें पंक्तियों की संख्या इंगित करने की आवश्यकता नहीं है *। – haccks

6

में एक समारोह आपका समस्या यह है कि सी में बहुआयामी सरणियों उनकी लंबाई सबसे बाहरी मूल्य के लिए छोड़कर जाना जाता है की जरूरत है के लिए मैट्रिक्स पारित कर सकते हैं।

void make_zero(void* _matrix,int row,int col) 
{ 
    int i,j; 
    int (*matrix)[col] = _matrix; 
    for(i=0;i<row;i++) 
     for(j=0;j<col;j++) 
     { 
      if(matrix[i][j]==0){ 
        printf("%d %d\n",i,j); 
     } 

    } 
} 
1

मानते हुए प्रयास करें:

आप क्या कर सकते मैट्रिक्स पकड़े स्मृति सूचक पारित और फिर सही प्रकार के लिए यह डाली है

make_zero(matrix,5,5); //function call 

void make_zero(int mat[][10],int row,int col) //definition 
{ 
//statements 
} 

संपादित करें:

ऊपर समाधान के रूप में लंबे समय तक काम करता है वास्तविक सरणी हमेशा से पारित कर दिया के रूप में आप इस तरह उपयोग कर सकते हैं 10 के दूसरे आयाम के रूप में @Jonathan Leffler सुझाव

make_zero(5,5,matrix); //function call 
void make_zero(int row, int col, int matrix[row][col]) //definition 
    { 
    //statements 
    } 
+2

यह तब तक काम करता है जब वास्तविक सरणी पास हमेशा 10 का दूसरा आयाम होता है। सी 8 9 में यह आवश्यक था; वीएलए (चर-लंबाई सरणी) समर्थन के साथ सी 99 सरणी के लिए बेहतर समर्थन प्रदान करता है। [उत्तर] (http://stackoverflow.com/a/18661858/15168) [haccks] द्वारा देखें (http: // stackoverflow।कॉम/उपयोगकर्ता/2455888/haccks) C99 संस्करण के लिए - लेकिन तर्कों के संशोधित क्रम को नोट करें (क्योंकि आप जो अभी तक घोषित नहीं किए गए हैं उसका उपयोग नहीं कर सकते हैं)। –

+0

@ जोनाथन लेफ्लर उपयोगी जानकारी के लिए बहुत बहुत धन्यवाद। मेरा जवाब संशोधित – Gangadhar

संबंधित मुद्दे