2012-05-16 57 views
5

के रूप में मैं दो मैट्रिक्स को तर्क के रूप में पास करना चाहता हूं। इन matrices के अलग आकार है और मुझे समझ में नहीं आता कि मुझे यह काम कैसे करना है:पास मैट्रिक्स तर्क

#include <stdio.h> 
#include <stdlib.h> 


void f(int m[3][], int n); 

int main() 
{ 
    int A[3][3]={{1,2,3},{4,5, 6},{7,8,9}}; 
    int B[3][2]={{1,2},{3, 4}, {5, 6}}; 

    f(A, 3); 
    f(B, 2); 

    return 0; 
} 

void f(int m[3][], int n) 
{ 
    int i,j; 
    for(i=0;i<3;i++) 
    { 
     for(j=0;j<n;j++) 
     printf("%5d", m[i][j]); 
    } 
    return; 
} 

मैं यह कैसे कर सकता हूं?

+2

क्या काम नहीं कर रहा है? क्या आप संकलन-समय त्रुटि प्राप्त कर रहे हैं? –

+1

क्या आप [सी 8 9] (http://en.wikipedia.org/wiki/C89_ (C_version) # C89) का उपयोग कर रहे हैं, [सी 99] (http://en.wikipedia.org/wiki/C99), या कुछ कंपाइलर सी की विशिष्ट बोलीभाषा? आपके कंपाइलर को स्वीकार करने के लिए कॉन्फ़िगर किए गए भाषा संस्करण के आधार पर, फ़ंक्शंस में मैट्रिक्स तर्कों को पारित करने के तरीकों में अंतर हैं। –

+0

@HunterMcMillen yes main.c | 5 | त्रुटि: सरणी प्रकार में अधूरा तत्व प्रकार /main.c|12 आतंक: औपचारिक पैरामीटर 1 का अपूर्ण अपूर्ण – Nick

उत्तर

6

केवल सुरक्षित तरीका है कि मैं के बारे में पता यह करने के लिए,) आयाम मानकों में मैट्रिक्स आयामों को शामिल करने या पैरामीटर

void f(int **m, int w, int h) 
{ 
    int i,j; 
    for(i=0;i<w;i++) 
    { 
     for(j=0;j<h;j++) 
     printf("%5d", m[i][j]); 
    } 
    return; 
} 

विकल्प के रूप में मैट्रिक्स struct

विकल्प ए किसी तरह का बनाने के लिए है बी) एक संरचना

typedef struct Matrix 
{ 
    int w, h; 
    int** m; 
} Matrix; 

void f (Matrix *m) 
{ 
    for (int i = 0; i < m->w; ++i) 
    { 
     for (int j = 0; j < m->h; ++j) 
     { 
      printf(%5d", m->m[i][j]); 
     } 
    } 
} 
+0

आपका उत्तर C89 के लिए ठीक है, मुझे लगता है कि C99 के लिए बहुत आसान समाधान मौजूद हैं। –

+0

मैं सी 99 मानक से अपरिचित हूं। जिज्ञासा से बाहर, सी 99 में क्या जोड़ा जाता है जो आसान समाधान के लिए तैयार करेगा? –

+4

आप पैरामीटर के रूप में गतिशील सीमाओं के साथ वास्तविक 2 डी matrices के साथ 'void f (size_t n, int m [3] [n]) जैसे इंटरफेस प्राप्त कर सकते हैं। आप https://gustedt.wordpress.com/2011/01/13/vla-as-function-arguments/ –