|
|
|
| Как передать массив с функциии которую вызываем в main не использую глобальные переменные?!
Пожалуйста дайте лёгкий пример! | |
|
|
|
|
|
|
|
для: tricket
(23.11.2007 в 11:21)
| |
void fuck(char *a,int n)
{
for(int i=0;i<n;i++)a[i]=0;
}
void main(void)
{
int a[45];
fuck(a,45);
}
|
| |
|
|
|
|
|
|
|
для: alex19921992
(24.11.2007 в 01:13)
| | cпасибо так работает! но нужен 2 мерный массив, ну и вообще много мерный
#include <stdio.h>
void fuck(int *a,int n,int m)
{
for(int i=0;i<n;i++){
for(int g=0; g<m; g++){
a[i][g]=22;
}
}
}
void main(void)
{
int a[45][45];
fuck(a,45,45);
printf("%d",a[3][1]);
}
|
Выдал кучу ошибок...
Компилирую в borland C++ for DOS 3.1 | |
|
|
|
|
|
|
|
для: tricket
(24.11.2007 в 07:04)
| | Вот пример работы с матрицей. Компилится в Dev-C++, по идее, это ANSI C++, а, значит, должно работать и в Borland C++ 3.1
#include <stdio.h>
void initArray(int* matrix, int n, int m)
{
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
*(matrix+i*m+j) = 0;
}
}
}
int main(int argc, char* argv[])
{
int mat[3][4];
initArray(&mat[0][0],3,4);
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
printf("%d ",mat[i][j]);
}
printf("\n");
}
return 0;
}
|
| |
|
|
|
|
|
|
|
для: Фитч
(24.11.2007 в 13:10)
| | хм... по идее, надо initArray(int** matrix, int n, int m) (то есть две звездочки так как массив 2мерный), хотя не знаю... точно работает????? | |
|
|
|
|
|
|
|
для: Фитч
(24.11.2007 в 13:10)
| | спасибо! РАБОТАЕТ! один вопрос, нужен для защиты программы преподавателю, *(matrix+i*m+j) = 0; что означает?
и почему в C++ не могут как в PHP сделать передачу с функции массива(return $array) просто? | |
|
|
|
|
|
|
|
для: tricket
(25.11.2007 в 07:59)
| | Вы можете вернуть при помощи return указатель - его не обязательно через параметры возвращать.
>и почему в C++ не могут как в PHP сделать передачу с функции массива(return $array) просто?
Потому что массивов в C++ как таковых нет - имеются лишь указатели на область памяти, вы можете обращаться к ячейкам этой памяти при помощи квадратных скобок [], это будет выглядеть так, как если бы вы обращались к массиву - однако вы вполне можете перепахать всю память программы, если выйдите за пределы массива - C++ это не отслеживает (поэтому программы такие быстрые - не выполняются многие операции, которые выполняютс в других языках). | |
|
|
|
|
|
|
|
для: tricket
(25.11.2007 в 07:59)
| | *(matrix+i*m+j) = 0
matrix - указатель на ячейку памяти. предположем это ячейка имеет номер 100 (в десятичной системе счисления). тогда (matrix+i*m+j) = это ячейка с номером 100+i*m+j. а звездочка перед скобками - это значит "взять переменную по адресу matrix+i*m+j". то есть вычисляется адрес переменной, а потом берется сама переменная. таким образом здесь имитируется 2мерный массив. можно было просто написать matrix[i][j]=0 | |
|
|
|
|
|
|
|
для: alex19921992
(26.11.2007 в 03:15)
| | хм ячейка же может байт содержать, а если число будет иметь 20-30 знаков?! | |
|
|
|
|
|
|
|
для: tricket
(26.11.2007 в 10:40)
| | размер ячейки это sizeof(тип эл-та массива) | |
|
|
|