Αρα μπορεις να κανεις μια συναρτηση
- Κώδικας: Επιλογή όλων
int * foo(int * a){a[0]=1;......... return a;}
Στη main μετα αν εχεις π.χ int array[10]={...}; μπορεις να κανεις int arr[10];
arr=foo(array);
Oμοια ενας δυσδιαστατος πινακας ειναι ενας int **
Συντονιστής: konnn
int * foo(int * a){a[0]=1;......... return a;}
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
int ** foo(int ** arr);
int main(void)
{
int a[2][2]={{1,2},{3,4}};
int *o[2];
o[0]=a[0];
o[1]=a[1];
int **p=o;
cout<<p[1][1]<<"\n";
p=foo(p);
cout<<p[1][1]<<"\n";
return 0;
}
int ** foo(int ** arr)
{
arr[1][1]=10;
return arr;
}


Nisok έγραψε:Δεν γίνεται αυτό που ζητάς.
Μπορείς να βάλεις ως όρισμα ένα πίνακα, αλλά δεν μπορείς να τον επιστρέψεις.
Αυτό που μπορείς να κάνεις είναι η κλίση αναφοράς. Βάζεις όρισμα ένα δείκτη σε πίνακα επεξεργάζεσαι τον δείκτη
και δεν επιστρέφεις τίποτα, γιατί οι αλλαγές γίνονται αμέσως.
[snip]
#include <stdio.h>
#include <stdlib.h>
#define NROWS 6
#define NCOLS 12
// ------------------------------------------------------
int **init_tab( const int nrows, const int ncols, int table[][ncols] )
{
register int i,j;
for (i=0; i < nrows; i++)
for (j=0; j < ncols; j++)
table[i][j] = i * ncols + j;
return (int **)table;
}
// ------------------------------------------------------
void print_tab( const int nrows, const int ncols, int table[][ncols] )
{
register int i,j;
for (i=0; i < nrows; i++)
for (j=0; j < ncols; j++)
printf("[%d, %d] = %d\n", i, j, table[i][j] );
}
// ------------------------------------------------------
int main( void )
{
int tab[ NROWS ][ NCOLS ] = { {0,0} };
print_tab( NROWS, NCOLS, (int (*)[NCOLS]) init_tab( NROWS, NCOLS, tab ) );
exit(0);
}
