2012-07-04 18 views
6

मैं शतरंज बोर्ड के आकार का प्रतिनिधित्व करने के लिए एक 2 डी सरणी घोषित करने के लिए की जरूरत है। हालांकि, मुझे एक परेशानी हो रही है कि मैं वास्तव में बोर्ड की चौड़ाई और लंबाई की गणना कैसे करूं। मैं जानना चाहता हूं कि मैं अपने 2 डी सरणी2 डी सरणी पंक्तियां/स्तंभ लंबाई सी

कहें, int boardSize[5][5] कहां पंक्तियों और कॉलम के आकार की गणना कैसे कर सकता हूं?

int main() 
{ 
    int boardSize[5][5]; 
    int boardWidth=? 
    int boardHeight =? 
    createBoard(boardWidth, boardHeight); 
} 

int createBoard(int width, int height) 
{ 
    // code that actually creates board // 
} 

क्षमा करें, भिक्षा में विशिष्ट नहीं होने के कारण। तो, यहां मुझे बोर्डविड्थ और बोर्डहेइट चर की गणना करने की आवश्यकता है? मैं इसे उपरोक्त घोषित सरणी से कैसे करूं। धन्यवाद!

+0

हाय, जैक, स्टैक ओवरफ्लो में आपका स्वागत है। अभी यह अस्पष्ट है कि यहां क्या पूछा जा रहा है, क्या आप अधिक सटीक हो सकते हैं? आप जो हासिल करने की कोशिश कर रहे हैं उसका एक छोटा कोड उदाहरण सही होगा। – unkulunkulu

उत्तर

8

boardSize[0] आप मैट्रिक्स, boardSize[0][0] उसके तत्वों के पहले की पहली पंक्ति देता है। तो आप जिस मात्रा की तलाश कर रहे हैं वह sizeof boardSize/ sizeof boardSize[0] और sizeof boardSize[0]/ sizeof boardSize[0][0] है।

बीटीडब्लू: size_t आकार के लिए एक प्रकार के रूप में उपयोग करें, int नहीं।

+0

धन्यवाद जेन्स, मुझे लगता है कि यह वही है जो मैं देख रहा था :) –

+0

@larkey, ऐसा क्यों होगा? आधार प्रकार यहां 'int' है। तो यह आमतौर पर '4' होगा। –

+0

>। <हाँ, मैं बहुत लंबे समय तक वर्णों के साथ काम करते समय इसे पार कर गया। – larkey

0

यदि आप कहते हैं

int boardSize[5][5]; 

कि आप पूर्णांकों का एक 2 डी सरणी देता है, 5 से 5 आकार में। तो इसमें कुल 25 पूर्णांक के लिए प्रत्येक 5 स्तंभों की 5 पंक्तियां होंगी।

+0

मुझे पता है, मेरा मतलब है कि मैं इन पैरामीटर को फ़ंक्शन में चौड़ाई और ऊंचाई के रूप में कैसे पास करूंगा? Int चौड़ाई, int ऊंचाई कहने के लिए, मुझे एक अलग चर होना चाहिए। –

+0

@ जैकमोर्टन - इस टिप्पणी में आप जो कहते हैं वह सवाल से बिल्कुल स्पष्ट नहीं था। मैं एक संपादन का सुझाव दूंगा। – ArjunShankar

0
printf("Size of the board in bytes %d\n", sizeof(boardSize)); 
printf("Size of column size in bytes %d\n", 5*sizeof(int)); 
printf("Size of row in bytes %d\n", 5*sizeof(int)); 

आप बोर्ड को छोड़ना चाहें के रूप में स्थिर घोषित ऐसा वैश्विक रूप में आवंटित हैं, तो

static int board[5][5]; 

फिर अपने "createBoard" विधि में यह पार सही आरंभीकरण के लिए (मैं हंगरी अंकन नफरत):

for(i = 0; i < hight; i++) 
    for(j = 0;j< width; j++) 
    board[i][j] = <initialization stuff> 

या आप गतिशील रूप से इसे अपने createBoard() विधि में आवंटित कर सकते हैं। उस मामले में मुख्य के लिए स्थानीय चर के रूप में घोषित नहीं करते हैं।

int * createBoard(int hight, int width){ 
    int * board; 
    if(board = malloc(sizeof(int) * hight * width)) 
     return board; 
    return NULL; 
} 

मुख्य में() आप कुछ इस तरह कर सकते हैं:

int * board = createBoard(5,5); 
if(!board) 
    printf("Allocation failure \n"); 
    exit(EXIT_FAILURE); 
+0

धन्यवाद, यह उपयोगी था –

0

यह आसानी से अपने कोड से सभी रहस्यमय जादू संख्या को हटाने के साथ तय हो गई है।

#define BOARD_WIDTH 8 
#define BOARD_HEIGHT 8 


square_t board [BOARD_WIDTH][BOARD_HEIGHT]; 

createBoard (board, BOARD_WIDTH, BOARD_HEIGHT); 


void createBoard (square_t* board, int boardWidth, int boardHeight) 
{ 

}