简体   繁体   中英

two functions (read and display an array) using pointers to structures

I just start to learn pointers to structures and I'm confused.I have to create a type of data ARRAY (which is associated with an array which contains integers.) like a structure which contains: numbers of array's elements and the array's elements stored in a part of memory(heap), dynamically allocated.

So I wrote:

typedef struct ARRAY
{
        int nrElem; // number of elements
        int *v[100];
};

Now I need to create 2 functions, one for reading an array from keyboard and the second one to display it using the structure I declared.

I tried but I get stuck.

void arrayDisplay(ARRAY *ps)
{
        int i;
        for(i=0;i<pd->nrElem;++i)
        {
                printf("%d",)
        }
}

void readArray(ARRAY *ps)
{
        int i;
        for(i=0;i<pd->nrElem;++i)
        {
                printf("%d",)
                scanf("%d",&);
        }
}

How to continue?

Instead of an array of pointers int *v[100]; you need an array of ints int v[100]; in your data structure.

See code below:

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

typedef struct ARRAY
{
        int nrElem; // number of elements
        int v[100];
} ARRAY;

void arrayDisplay(ARRAY *ps)
{
        int i;
        for(i=0;i<ps->nrElem;++i)
        {
                printf("%d\n", ps->v[i]);
        }
}

void readArray(ARRAY *ps)
{
        int i;
        for(i=0;i<ps->nrElem;++i)
        {
                printf("%d: ", i);
                scanf("%d",&ps->v[i]);
        }
}

int main()
{
    ARRAY a;

    a.nrElem = 5;
    readArray(&a);
    arrayDisplay(&a);

    return 0;
}

If you really want to use an array of int pointers you need to allocate the array first. And a different level of redirection for printf and scanf. But I'm not sure why you want to allocate memory for an integer array like this.

typedef struct ARRAY
{
        int nrElem; // number of elements
        int *v[100];
} ARRAY;

void arrayDisplay(ARRAY *ps)
{
        int i;
        for(i=0;i<ps->nrElem;++i)
        {
                printf("%d\n", *ps->v[i]);
        }
}

void readArray(ARRAY *ps)
{
        int i;
        for(i=0;i<ps->nrElem;++i)
        {
                printf("%d: ", i);
                scanf("%d",ps->v[i]);
        }
}

int main()
{
    ARRAY a;
    int i;

    a.nrElem = 5;
    for(i=0;i<a.nrElem;++i) {
        a.v[i] = (int*)malloc(sizeof(a.v[i]));
    }
    readArray(&a);
    arrayDisplay(&a);

    return 0;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM