Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. sizeof(float)/sizeof(float[0])

sizeof(float)/sizeof(float[0])

Scheduled Pinned Locked Moved C / C++ / MFC
questiondata-structures
15 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J James R Twine

    The math is working: 4/4=1.    The problem looks like dVertexes is not a true array.  It is an atomic type (double) or a pointer.    Note that using sizeof(...) in this way does not work correctly with pointers to arrays, even if they are pointers that have decayed from a true array.    Peace!

    -=- James


    If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
    Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
    DeleteFXPFiles & CheckFavorites (Please rate this post!)

    A Offline
    A Offline
    Alex Cutovoi
    wrote on last edited by
    #6

    ok, so how can I discover the array size? I don't want to use vectors....

    J W 2 Replies Last reply
    0
    • A Alex Cutovoi

      ok, so how can I discover the array size? I don't want to use vectors....

      J Offline
      J Offline
      James R Twine
      wrote on last edited by
      #7

      You have to pass the size to the called function to let it know how much valid data exists.    Peace!

      -=- James


      If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
      Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
      DeleteFXPFiles & CheckFavorites (Please rate this post!)

      A 1 Reply Last reply
      0
      • A Alex Cutovoi

        my array is declared as following: float fVertexes[6]; I'm inserting this values; fVertexes[0] = 1.0; fVertexes[1] = 0.0; fVertexes[2] = -1.0; fVertexes[3] = 1.0; fVertexes[4] = -1.0; fVertexes[5] = -1.0; I'm passing this guy to a function, like this: primitive.Shape(GL_TRIANGLES, fVertexes, 1,1,1); Again, why it returns 1 if I don't create this guy dynamically?

        G Offline
        G Offline
        Galatei
        wrote on last edited by
        #8

        Hi, Just modify Shape function by adding INT nCount after pointer to array of floats. Then in Shape function, calculate array size as nCount*sizeof(float). nCount should specify the size of the array. Regards

        A 1 Reply Last reply
        0
        • A Alex Cutovoi

          ok, so how can I discover the array size? I don't want to use vectors....

          W Offline
          W Offline
          Waldermort
          wrote on last edited by
          #9

          Depending on how often you are passing these arrays around and how frequently the size changes, you might want to declare a struct with the array and the size as members, then pass that to your functions.

          typdef struct _double_array
          {
          double array[9];
          int nCount;
          } DOUBLE_ARRAY, *LPDOUBLE_ARRAY;

          You can then pass the stuct 'DOUBLE_ARRAY' or a pointer to the struct 'LPDOUBLE_ARRAY'.

          A 1 Reply Last reply
          0
          • G Galatei

            Hi, Just modify Shape function by adding INT nCount after pointer to array of floats. Then in Shape function, calculate array size as nCount*sizeof(float). nCount should specify the size of the array. Regards

            A Offline
            A Offline
            Alex Cutovoi
            wrote on last edited by
            #10

            I made this: I've passed the size of the array(like you've said) and divided by float[0] and works fine

            1 Reply Last reply
            0
            • J James R Twine

              You have to pass the size to the called function to let it know how much valid data exists.    Peace!

              -=- James


              If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong!
              Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road!
              DeleteFXPFiles & CheckFavorites (Please rate this post!)

              A Offline
              A Offline
              Alex Cutovoi
              wrote on last edited by
              #11

              I've made this: primitive.Shape(GL_TRIANGLES, fVertexes, sizeof(fVertexes), 0,1,1); And in the function I'm divided the size of array by the size of first element in the array. Works fine, thanks for help

              1 Reply Last reply
              0
              • W Waldermort

                Depending on how often you are passing these arrays around and how frequently the size changes, you might want to declare a struct with the array and the size as members, then pass that to your functions.

                typdef struct _double_array
                {
                double array[9];
                int nCount;
                } DOUBLE_ARRAY, *LPDOUBLE_ARRAY;

                You can then pass the stuct 'DOUBLE_ARRAY' or a pointer to the struct 'LPDOUBLE_ARRAY'.

                A Offline
                A Offline
                Alex Cutovoi
                wrote on last edited by
                #12

                Thanks for the tip. It's a good idea

                W 1 Reply Last reply
                0
                • C Chris Losinger

                  Alex Cutovoi wrote:

                  Why it returns 1?

                  4/4 = 1 4 = size of a pointer is dVertexes allocated dynamically ? if so, you can't use that sizeof trick to get its size. -c

                  image processing | blogging

                  A Offline
                  A Offline
                  Alex Cutovoi
                  wrote on last edited by
                  #13

                  I made some modifications and works fine. Thanks for the support

                  1 Reply Last reply
                  0
                  • A Alex Cutovoi

                    Thanks for the tip. It's a good idea

                    W Offline
                    W Offline
                    Waldermort
                    wrote on last edited by
                    #14

                    No problem. If you look into the windows api's, you will find that many of the functions are declared like this, you either have to set up a struct or you get one back. My current project calls on the need of dealing with several arrays all relating to the same info, so instead of passing all the arrays and sizes to each function, I simply pass a pointer to a struct.

                    1 Reply Last reply
                    0
                    • A Alex Cutovoi

                      Hi fellows I have a single question. I have a float array that have 6 elements all of them initialized with values. I need to find out the size of this array. Let's called my float array of theArray. I use this commom formula: sizeof(theArray)/sizeof(theArray[0]). My results are strange, because it returns 1. I use this code to see the values: char cTemp[50]; sprintf(cTemp, "%d %d %d", sizeof(dVertexes), sizeof(dVertexes[0]), sizeof(dVertexes)/sizeof(dVertexes[0])); MessageBox(NULL, cTemp, "", MB_OK); In the first and in the second values it returns "4", and in the third value it returns "1". Why it returns 1? Did this operation returns the correct size of array(in my case "6")? thanks for the support

                      Z Offline
                      Z Offline
                      Zac Howland
                      wrote on last edited by
                      #15

                      If the array is allocated on the heap, sizeof behaves differently than it does if it was on the stack.

                      int i = 0;
                      
                      float stackArray[5];
                      i = sizeof(stackArray) / sizeof(stackArray[0]);	// i is 5
                      // sizeof(stackArray) will return (5 * sizeof(float))
                      // sizeof(stackArray[0]) will return sizeof(float)
                      
                      float* heapArray = new float[5];
                      i = sizeof(heapArray) / sizeof(heapArray[0]);	// i is 1
                      // sizeof(heapArray) will return sizeof(float*)
                      // sizeof(heapArray[0]) will return sizeof(float)
                      
                      // Interesting Note (forget bounds errors here)
                      int myFunction(float* myArray)
                      {
                      	return sizeof(myArray) / sizeof(myArray[0]);
                      }
                      // above function will return heap results regardless of where
                      // the float array is actually allocated (that is, always 1)
                      

                      If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups