Другие языки программирования и технологии

С Указатели двухмерный масив

#include <stdio.h>
#include <math.h>

int main(void)
{

int n;
scanf("%d", &n);
float a[n] [n];
printf("Введите масив\n");

vvod(a,n);

printf("\nВведенный масив\n");

pecat(a,n);

return 0;
}

int vvod(float **a, const int n) {
for(i=0; i<n;>[j]);
}

int pecat(const float **a, int n) {
int i,j;
for(i=0; i<n;>[j]);
printf("\n");
}
}

На вводе массива пишет Ошибка сегментирования (core dumped)
мне надо сделать с указателями
> int n;
> scanf("%d", &n);
> float a[n][n];
Компилятор GCC? В MS VC такое не прокатит.

#include <stdio.h>
#include <stdlib.h>

int vvod(float *a, const int n) {
    int c;
    for (c = 0; c < n * n; ++c) scanf("%f", a + c);
}

int pecat(const float *a, const int n) {
    int r, c;
    for(r = 0; r < n; ++r) {
        for (c = 0; c < n; ++c) printf("%""5.1f", *(a + r * n + c));
        putchar('\n');
    }
}

int cmp(const void *x, const void *y) {
    return *(float *)x < *(float *)y ? -1 : *(float *)x > *(float *)y? 1 : 0;
}

main() {
    int n;
    scanf("%d", &n);
    float a[n][n];
    printf("Введите масив\n");
    vvod(&a[0][0], n);
    printf("\nВведенный масив\n");
    pecat(&a[0][0], n);
    qsort(&a[0][0], n * n, sizeof(a[0][0]), cmp);
    printf("\nОтсортированный массив\n");
    pecat(&a[0][0], n);
    return 0;
}
Сергей Короневский
Сергей Короневский
60 469
Лучший ответ
код лучше на http://pastebin.com/
удивительно что у вас вообще собралось с такими то конcтрукциями типа "float a[n] [n]; "

а так у вас должно быть float *a (а не float **a) и понимание того, что такое указатель

как то так должно быть, короче. разверните двумерный массив в одномерный при передаче в функцию
Он и так у вас сейчас передается -- vvod(a,n);

получаете указатель на float (т. е. на начало массива)
int vvod(float *a, const int n)

и читаете пишете данные как a(i*n+j)
Альберт Dualcore
Альберт Dualcore
5 750