आप विशेष तत्व का उपयोग या सरणी पर काम करना चाहते हैं लेकिन आप गतिशील मैट्रिक्स बनाना चाहते हैं, तो आप को पारित करके प्रत्येक तत्व का उपयोग करने के उपयोग संकेत का उपयोग कर सकते हैं प्रिंट फ़ंक्शन में आयाम।
के बाद से यदि आप एक बहुआयामी सरणी int [][]
रूप में परिभाषित किया है, तो x = y[a][b]
-x = *((int *)y + a * NUMBER_OF_COLUMNS + b);
चेक अधिक जानकारी के लिए इस पोस्ट के बराबर है: How to use pointer expressions to access elements of a two-dimensional array in C?
तो, अगर आप पूरे मैट्रिक्स प्रिंट या किसी तक पहुंचना चाहते हैं विशेष तत्व, आप कर सकते हैं की तरह: उपरोक्त कार्यक्रम के लिए
#include <iostream>
using namespace std;
//the function print_2D_matrix receives 4 arguments: pointer to first element
// dimension of array arr, i.e. n x m
// index of the element to be printed, i.e. a and b
void print_2D_matrix(int *arr, int n, int m, int a, int b){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++)
printf("%d ", *(arr + (i * m) + j));
printf("\n");
}
//go to the address just before a row, i.e. (a - 1) * NO_OF_COLUMNS
//then go to the address on b column, i.e. (a - 1) * NO_OF_COLUMNS + b
//since we started from the base address, i.e. first element(arr[0][0]), subtract 1
printf("arr[3][3] = %d\n", *(arr + ((a - 1) * m) + b - 1)); //print arr[a][b]
}
int main() {
int n, m;
cin>>n>>m;
int arr[n][m];
for(int i = 0; i < n; i++) //initialize the matrix
for(int j = 0; j < m; j++)
arr[i][j] = i * j;
print_2D_matrix((int *) arr, n, m, 3, 3);
return 0;
}
आउटपुट (nxm के लिए = 4 x 5) है:
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
arr[3][3] = 4
स्रोत
2014-09-19 20:55:44
[वैरैडिक टेम्पलेट्स] (http://en.cppreference.com/w/cpp/language/parameter_pack) के साथ यह संभव हो सकता है। –
आप किसी भी तरह से टेम्पलेट का उपयोग करने में सक्षम हो सकते हैं, लेकिन यह प्रोग्राम को गलती से खोल देगा, खासकर क्योंकि ऐसा लगता है कि आप एक टीम के साथ काम कर रहे हैं। – Cartier
@ जोचिमपिलबोर्ग यह निर्भर करता है कि पीढ़ी यादृच्छिक है, या पूर्वनिर्धारित है; एक परिवर्तनीय टेम्पलेट प्री-डिफ़ाइंड यादृच्छिक नहीं के लिए काम करेगा। – Cartier