Dynamically loop through array of structures

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • uidzer0

    Dynamically loop through array of structures

    Hey everyone,

    I apologize in advance for this novice question however I'm not having
    any luck finding the answer myself.

    I'm attempting to loop through an array of structures passed to a
    function, however I'm not sure how to obtain the number of elements in
    the array.

    The structure is defined as:
    typedef struct {
    time_t creation_date;
    int priority;
    char *text;
    } note;

    And here's the function prototype:
    void get_notes(note *notes);

    How would I dynamically loop through *notes?
  • Richard Bos

    #2
    Re: Dynamically loop through array of structures

    uidzer0 <ben.lemasurier @gmail.comwrote :
    I'm attempting to loop through an array of structures passed to a
    function, however I'm not sure how to obtain the number of elements in
    the array.
    You can't. You have to pass that number in to the function, use a
    terminator element, or have some other way to find out. This is the same
    for all arrays, whether or not they're made of structs.

    Richard

    Comment

    • uidzer0

      #3
      Re: Dynamically loop through array of structures

      On Apr 15, 9:13 am, r...@hoekstra-uitgeverij.nl (Richard Bos) wrote:
      uidzer0 <ben.lemasur... @gmail.comwrote :
      I'm attempting to loop through an array of structures passed to a
      function, however I'm not sure how to obtain the number of elements in
      the array.
      >
      You can't. You have to pass that number in to the function, use a
      terminator element, or have some other way to find out. This is the same
      for all arrays, whether or not they're made of structs.
      >
      Richard
      Ahh... well that makes more sense - thanks.

      Comment

      • CBFalconer

        #4
        Re: Dynamically loop through array of structures

        uidzer0 wrote:
        >
        I'm attempting to loop through an array of structures passed to
        a function, however I'm not sure how to obtain the number of
        elements in the array.
        >
        The structure is defined as:
        typedef struct {
        time_t creation_date;
        int priority;
        char *text;
        } note;
        >
        And here's the function prototype:
        void get_notes(note *notes);
        >
        How would I dynamically loop through *notes?
        One way is to hold the pointers to note (i.e. the note* items) in
        an array terminated with a NULL. Then the function might be:

        void get_notes(note *notes) {
        while (*notes) {
        process_one_not e(*notes);
        notes++;
        }
        }

        but you would be better advised to get rid of the void and return
        an error indicator. Same for process_one_not e()

        --
        [mail]: Chuck F (cbfalconer at maineline dot net)
        [page]: <http://cbfalconer.home .att.net>
        Try the download section.


        ** Posted from http://www.teranews.com **

        Comment

        • David Thompson

          #5
          Re: Dynamically loop through array of structures

          On Tue, 15 Apr 2008 16:59:26 -0400, CBFalconer <cbfalconer@yah oo.com>
          wrote:
          uidzer0 wrote:

          I'm attempting to loop through an array of structures passed to
          a function, however I'm not sure how to obtain the number of
          elements in the array.

          The structure is defined as:
          typedef struct {
          time_t creation_date;
          int priority;
          char *text;
          } note;

          And here's the function prototype:
          void get_notes(note *notes);

          How would I dynamically loop through *notes?
          >
          One way is to hold the pointers to note (i.e. the note* items) in
          an array terminated with a NULL. Then the function might be:
          >
          OP doesn't have an array of pointers, but one pointer to an array.
          void get_notes(note *notes) {
          while (*notes) {
          process_one_not e(*notes);
          notes++;
          }
          }
          >
          For an array of pointer you need (modulo spacing)
          void get_notes (note * * notes)
          then as you have it. Or (equivalent to the compiler)
          void get_notes (note * notes [] )
          to emphasize the array-of-pointer-ness, but downplay the fact that
          array parameters/arguments are really pointers; pick your poison.

          - formerly david.thompson1 || achar(64) || worldnet.att.ne t

          Comment

          Working...