+ 2
Help me please, arrays in C
How do you assing value to an array in c with a function. I have an empty array and I have to pass it as parameter to a function an give values. I mean: where i wrote °°°°° I don't know what to put, because that value can't be empty, that is the place for the colum, but I'm reading the value void values(arr[][°°°°°°°],row,col){ for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ arr[i][j]= rand(); } } } void main(){ scanf("%d",&row); scanf("%d",&col); int myArray[row][col]; }
4 ответов
+ 16
First of all, You are getting the col and row size from the input so you've got to dynamically allocate this particular array.
[https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new]
//================================================
// Array of pointers to arrays (Dynamic 2D array)
// Done for : Victor_*
// By : Babak Sheykhan
//================================================
#include <iostream>
#include <cstdlib>
#include <ctime>
void filler(int **arr, int r, int c){
std::cout << std::endl;
for(int i = 0; i < r; i++) {
for(int j = 0; j < c; j++) {
arr[i][j]= rand() % 21 + (-10); // [-10, 10]
std::cout.width(5);
std::cout << arr[i][j];
}
std::cout << std::endl;
}
}
int main() {
srand(static_cast<size_t>(time(0)));
int row = 0;
int col = 0;
std::cout << "Row is "; std::cin >> row;
std::cout << "Col is "; std::cin >> col;
// Declare an array of pointers to arrays (a dynamic 2D array)
// which we dynamically allocate memory to the first dimension (row)
int** myArray = new int *[row];
// In order to complete our allocation, we've got to use a for loop
// to claim the required space out of heap for columns group
for(int i = 0; i < row; ++i)
myArray[i] = new int[col];
// Calling filler function
filler(myArray, row, col);
// Clean up the heap
for(int i = 0; i < row; ++i) {
delete [] myArray[i];
myArray[i] = 0; // reset columns to null
}
delete [] myArray;
myArray = 0; // reset rows to null
}
[https://code.sololearn.com/cgf1339VwBFC]
As you see, memory management is a bit pain. One of the best alternatives for dynamic arrays would be std::vector.
There are three ways to pass a 2D array to a function. The following link is a related discussion about those 3 ways.
[https://stackoverflow.com/questions/8767166/passing-a-2d-array-to-a-c-function]
+ 4
There are some mistakes in your code :
1) main should return an int. Even if it is not mandatory, it is a good practice :)
2) A static array (declared with brackets) needs to have CONSTANT size. That means that the size of the array will NEVER change once your code is compiled.
3) If you want a function to take your static array as a parameter, as it is of constant size, you'll have to put its size instead of °°°°°°
4) If you want to do a have an array with undefined size (like it seems you wanted in your code), then use pointers instead, and use them also as parameter of your function
Do you already know how to use pointers or do you want a little explanation ?
+ 3
thank you guys,for taking the time ,reading and explaining. I'm supposed to be learning that at thr univerisity but my professor just got sit and stays there waiting if we have a question jajajj
+ 1
but as I'm reading the value of the colum it's gonna be different, please I need your help, or tell me another way to fill an array with a function
It just have to be 2x2
I didn't call the funtion values() in the main because of lack of space