जैसा कि "गॉटफ्राइड" की एक पुस्तक द्वारा सुझाया गया है, मैंने एक सरणी इनपुट करने और सरणी की सामग्री को मैट्रिक्स रूप में प्रदर्शित करने का प्रयास किया:

#include<stdio.h>

#define row 2
#define col 3

int main(){
    int (*a)[col];
    int i,j;

    for(i=0;i<row;i++){
        for(j=0;i<col;j++){
            printf("Enter a(%d,%d)",i,j);
            scanf("%d",(*(a+i)+j));
        }
    }

    return 0;
}

तत्व इनपुट करने के बाद मुझे निम्न आउटपुट मिलता है:

विभाजन दोष (कोर नहीं चला)

कोड में क्या समस्या है? क्या यह जीसीसी के पिछले संस्करण में काम कर रहा था इसलिए लेखक ने इसे लिख दिया? समान स्तर की सरलता से समस्या को हल करने का सही तरीका क्या है?

c gcc
0
Saugat Sigdel 17 फरवरी 2020, 09:26
int (*a)[col]; एक 2D सरणी नहीं है, यह col आकार की सरणी का सूचक है।
 – 
kiran Biradar
17 फरवरी 2020, 09:28
क्या यह int पॉइंटर्स की एक सरणी नहीं है?
 – 
Odysseus
17 फरवरी 2020, 09:35
2
नहीं, int *a[col]; है
 – 
kiran Biradar
17 फरवरी 2020, 09:39

2 जवाब

जैसा कि टिप्पणियों में बताया गया था कि यह 2D सरणी नहीं है, बल्कि पॉइंटर्स की 1D सरणी है। इसके अलावा लूप के लिए दूसरे में आप गलती से j<col के बजाय i<col का उपयोग करते हैं। यह काम करेगा

#include<stdio.h>

#define ROW 2
#define COL 3

int main(){
    int a[ROW][COL];
    int i, j;

    for(i = 0; i < ROW; i++){
        for(j = 0;j < COL; j++){
            printf("Enter a(%d,%d)", i, j);
            scanf("%d", (*(a + i ) + j));
        }
    }
    return 0;
}
0
Eraklon 17 फरवरी 2020, 09:43

यदि आप a को col ints की एक सरणी के सूचक के रूप में घोषित करना चाहते हैं, जैसा कि इस पंक्ति में किया गया है

int (*a)[col];

फिर आपको इसका उपयोग करने की कोशिश करने से पहले, आवश्यक मेमोरी को आवंटित (और अंततः मुक्त) करना चाहिए।

a = malloc(sizeof(*a) * row);
if (!a)
    exit(1);
// ...
free(a);

नेस्टेड लूप में पोस्ट किए गए कोड में एक और समस्या है

for (i = 0; i < row; i++) {
    for (j = 0; i < col; j++) {
//              ^^^^^^^           It should be 'j < col'
0
Bob__ 17 फरवरी 2020, 13:20