Jak przekazac tablice utworzona dynamicznie we funkcji malloc za pomoca wskaznika do innej funkcji?

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

int* createIntArray(int l){
    int i;
    int *a = (int*)malloc(l*sizeof(int));
    for(i = 0; i < l; i++){
        printf("Podaj Wartosci: a[%d] : ", i);
        scanf("%d",&a[i]);
    }
    return a;
}

void printIntArray(int a[],int l){
    int i;
    printf("\nPodane Wartosci to: ");
    for(i = 0; i < l; i++){
        printf(" %d", a[i]);
    }
    printf("\n");
}

int main(void){
    int l;
    printf(" Rozmiar Tablicy: ");
    scanf("%d", &l);
    if(l > 0){
            int a[l];
             a[l] = createIntArray(l);
            printIntArray(a, l);
    }
    printf("\n");
    return 0;
}
1

int* make_int_array(size_t s)
{
    return (int*)malloc(sizeof(int) * s);
}

void print(int* arr, size_t s)
{
    for(size_t i = 0; i < s; ++i)
        printf("%d ", arr[i];
}

int main()
{
    int* arr = make_int_array(3);
    for(size_t i = 0; i < 3; i++)
        arr[i] = i*i;
    print(arr, 3);
    free(arr);
}
2

Po co Ci to jak w C możesz używać VLA?

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

void fill_array(int arr[], int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("Podaj Wartosci: a[%d] : ", i);
        scanf("%d",&arr[i]);
    }
}

void print_array(int arr[], int size)
{
    printf("\nPodane Wartosci to: ");
    for(int i = 0; i < size; i++)
    {
        printf(" %d", arr[i]);
    }
    printf("\n");
}

int main(void){
    int size;
    printf("Rozmiar Tablicy: ");
    scanf("%d", &size);
    if(size > 0)
    {
        int numbers[size];
        fill_array(numbers, size);
        print_array(numbers, size);
    }
    printf("\n");
    return 0;
}
0

@atmal dzieki, ta metode juz mam i z tym nie mam problemu ;)
@kq pomysl dobry, ale chodzi o to zeby we funkcji creatyIntArray stworzyc tablice i wczytac do niej wartosci podane przez urzytkownika a na koncu zreturnowac pointer do tej tablicy. Nastepna funkcja ma wyswietlic elementy tablicy.

0

To dodaj wczytywanie do funkcji? Nie rozumiem problemu.

0

no zgadza sie, ale mimo to caly czas cos jest nie tak z przekazaniem gotowej tablicy do funkcj printIntArray.

#include <stdio.h>
#include <stdlib.h>
int* createIntArray(int l){
    int i;
    int a[l];
    for(i = 0; i < l; i++){
        printf("Podaj wartosci: a[%d] : ",i);
        scanf("%d",&a[i]);

    }
    return (int*)malloc(l*sizeof(int));
}
void printIntArray(int a[],int l){
    int i;
    printf("\nPodane wartosci to: ");
    for(i = 0; i < l; i++){
        printf(" %d", a[i]);
    }
    printf("\n");
}
int main(void){
    int l;
    printf("Rozmiar Tablicy : ");
    scanf("%d", &l);
    if(l > 0){
          
    int* a = createIntArray(l);

    printIntArray(a, l);
    }
    printf("\n");
    return 0;
}
1
int* createIntArray(int l){
    int i;
    int a[l];
    for(i = 0; i < l; i++){
        printf("Podaj wartosci: a[%d] : ",i);
        scanf("%d",&a[i]);
 
    }
    return (int*)malloc(l*sizeof(int));
}

Wczytujesz do zupełnie innej tablicy od tej co zwracasz.

1

Dodam może jeszcze do tego co @kq napisał:
malloc zwraca wskaźnik na przydzielony obszar pamięci który możesz użyć jako tablica, więc musisz najpierw stworzyć ten obszar i przypisać gdzieś ten wskaźnik a dopiero potem go zapełnić.

1
#include <stdio.h>
#include <stdlib.h>
int* createIntArray(int l){
    int i;
    int *a;
    a = (int*)malloc(l*sizeof(int));
    for(i = 0; i < l; i++){
        printf("Ihre Werte: a[%d] : ",i);
        scanf("%d",&a[i]);

    }

    return a;
}
0

Dziekuje za wskazowki, teraz ten dziala jak nalezy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1