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. The Lounge
  3. Learnt something "new" about C/C++

Learnt something "new" about C/C++

Scheduled Pinned Locked Moved The Lounge
questionc++comhostingcloud
36 Posts 17 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.
  • K k5054

    Seems to work fine.

    #include <iostream>

    int foo(int x, int *a)
    {
    return x[a];
    }

    int main()
    {
    int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int x = 5;

    std::cout << arr\[x\] << " "
              << x\[arr\] << " "
              << foo(x, arr) << std::endl;
    

    }

    Compiles and runs as expected without warning.

    W Offline
    W Offline
    W Balboos GHB
    wrote on last edited by
    #17

    That's unfortunate - I was hoping that the compiler wouldn't accept it because it makes x appear to be an array. It's not that I don't understand - but one could hope that the compiler would differentiate between the two.

    "The difference between genius and stupidity is that genius has its limits." - Albert Einstein

    "As far as we know, our computer has never had an undetected error." - Weisert

    "If you are searching for perfection in others, then you seek disappointment. If you are seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010

    1 Reply Last reply
    0
    • Sander RosselS Sander Rossel

      Afzaal Ahmad Zeeshan wrote:

      After all, you also like PHP[^]. ;-P Don't you Sander? :laugh:

      I really don't... :sigh: Although I use both in my blogs :) PHP: Web development #4: PHP in the back[^] Haskell: How to Learn and Polyglot vs. Specialist[^] Maths in IT #1: Basic set theory[^] Maths in IT #2: Venn diagrams[^] Yeah, that's quite some Haskell snippets! ;)

      Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

      Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

      Regards, Sander

      A Offline
      A Offline
      Afzaal Ahmad Zeeshan
      wrote on last edited by
      #18

      Much respect for you, to bear so much pain, Sander! :laugh: I have just started Haskell, and I am very much loving it. I would give these articles of your a look, you have written a great article for Haskell. You got some more I can pay some attention to? :-)

      The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

      Sander RosselS 1 Reply Last reply
      0
      • B BillWoodruff

        Good luck on the exam ! I find that code example frightening :)

        Afzaal Ahmad Zeeshan wrote:

        I can say I know nothing of C or C++

        Well, you said the nothing you don't know well enough on this post to get my up-vote: that's something.

        «I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.

        A Offline
        A Offline
        Afzaal Ahmad Zeeshan
        wrote on last edited by
        #19

        Thank you, Bill! But may I ask, it was "frightening" in the sense of?

        The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

        B 1 Reply Last reply
        0
        • A Afzaal Ahmad Zeeshan

          Thank you, Bill! But may I ask, it was "frightening" in the sense of?

          The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

          B Offline
          B Offline
          BillWoodruff
          wrote on last edited by
          #20

          Afzaal Ahmad Zeeshan wrote:

          "frightening" in the sense of?

          I'd say it's about the same way as I feel looking in a mirror: that sense that what is on the surface is a very bad cover-up of something strange, and probably up to no good :)

          «I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.

          A 1 Reply Last reply
          0
          • A Afzaal Ahmad Zeeshan

            Much respect for you, to bear so much pain, Sander! :laugh: I have just started Haskell, and I am very much loving it. I would give these articles of your a look, you have written a great article for Haskell. You got some more I can pay some attention to? :-)

            The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

            Sander RosselS Offline
            Sander RosselS Offline
            Sander Rossel
            wrote on last edited by
            #21

            Afzaal Ahmad Zeeshan wrote:

            I have just started Haskell, and I am very much loving it.

            Haskell has good parts. It certainly changed the way I do my C# programming :) I just don't see myself writing entire applications in Haskell just yet...

            Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

            Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

            Regards, Sander

            A 1 Reply Last reply
            0
            • Sander RosselS Sander Rossel

              Afzaal Ahmad Zeeshan wrote:

              I have just started Haskell, and I am very much loving it.

              Haskell has good parts. It certainly changed the way I do my C# programming :) I just don't see myself writing entire applications in Haskell just yet...

              Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

              Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

              Regards, Sander

              A Offline
              A Offline
              Afzaal Ahmad Zeeshan
              wrote on last edited by
              #22

              Quote:

              I just don't see myself writing entire applications in Haskell just yet...

              Same thing here, I may never write entire application in Haskell, but I would love to use a few code blocks and make it interact with the WPF applications. :-)

              The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

              Sander RosselS 1 Reply Last reply
              0
              • A Afzaal Ahmad Zeeshan

                Quote:

                I just don't see myself writing entire applications in Haskell just yet...

                Same thing here, I may never write entire application in Haskell, but I would love to use a few code blocks and make it interact with the WPF applications. :-)

                The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                Sander RosselS Offline
                Sander RosselS Offline
                Sander Rossel
                wrote on last edited by
                #23

                Why not use F#? That's a whole lot easier to integrate with your C# projects. You can even do WPF entirely in F# without any hassle/Haskell!

                Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

                Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

                Regards, Sander

                A 1 Reply Last reply
                0
                • Sander RosselS Sander Rossel

                  Why not use F#? That's a whole lot easier to integrate with your C# projects. You can even do WPF entirely in F# without any hassle/Haskell!

                  Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

                  Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

                  Regards, Sander

                  A Offline
                  A Offline
                  Afzaal Ahmad Zeeshan
                  wrote on last edited by
                  #24

                  I know F#, a little bit. But right now I am getting rid of being "All Microsoft Geek Boy!". I am learning Linux, trying out new flavors of Linux... Currently my choice is 1. Ubuntu Studio 2. Ubuntu 3. openSUSE So, when I was learning other operating systems, I thought why not learn other frameworks and programming paradigms. I am not learning Haskell for WPF as I am not at all developing WPF these days. I am instead learning functional programming itself. From my research I came to know that LISP, Scala etc. were all easier than Haskell, which provoked me to take Haskell as a challenge. It was a great experience learning Haskell. :-) No Microsoft based programming for a while... Learning Linux, learning non-Microsoft languages. I mean, there are many frameworks and systems that a programmer must know. After all, there are many already doing the job of "Jimmy Kode[^]" in this world. :laugh:

                  The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                  Sander RosselS 1 Reply Last reply
                  0
                  • A Afzaal Ahmad Zeeshan

                    I know F#, a little bit. But right now I am getting rid of being "All Microsoft Geek Boy!". I am learning Linux, trying out new flavors of Linux... Currently my choice is 1. Ubuntu Studio 2. Ubuntu 3. openSUSE So, when I was learning other operating systems, I thought why not learn other frameworks and programming paradigms. I am not learning Haskell for WPF as I am not at all developing WPF these days. I am instead learning functional programming itself. From my research I came to know that LISP, Scala etc. were all easier than Haskell, which provoked me to take Haskell as a challenge. It was a great experience learning Haskell. :-) No Microsoft based programming for a while... Learning Linux, learning non-Microsoft languages. I mean, there are many frameworks and systems that a programmer must know. After all, there are many already doing the job of "Jimmy Kode[^]" in this world. :laugh:

                    The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                    Sander RosselS Offline
                    Sander RosselS Offline
                    Sander Rossel
                    wrote on last edited by
                    #25

                    Afzaal Ahmad Zeeshan wrote:

                    there are many frameworks and systems that a programmer must know

                    The average programmer only needs to know a few (and knows less) :) It's good to know a bit about everything because every new language or framework gives you a new perspective on the ones you already knew. For example, knowing Haskell made me really appreciate C# again! :laugh:

                    Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

                    Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

                    Regards, Sander

                    A 1 Reply Last reply
                    0
                    • A Afzaal Ahmad Zeeshan

                      I am going to have an exam of C++ tomorrow, so I thought why not just open the book, swap pages from one to the last one, then close it and go back to Haskell once again. But while I did, I asked myself "Are arrays actually consecutive in memory?". Along with that, I came to another question, "Why is a[5] == 5[a]?" that was something I never knew about before. So, I went searching for the answers and tried it on my own machine too, to make my mind actually believe that I was accessing the ath element of array 5. :laugh:

                      int main()
                      {
                      int a[5] = {1, 2, 3, 4, 5};
                      for (int i = 0; i < 5; i++) {
                      std::cout << i[a] << ", ";
                      }
                      std::cout << std::endl;
                      system("pause");
                      return 0;
                      }
                      // Output: 1, 2, 3, 4, 5,

                      For those who didn't know it (just like me!) the logic is that C (or C++) translates a[5] to *(a + 5) and then gets the data from that location. Which, is similar to having 5[a] that gets translated to *(5 + a). Mathematically, we know 5 + a == a + 5. Thus, compiler accepted that. I hope, I am not alone who didn't know it yet. :laugh: I can say I know nothing of C or C++. For those who want to read a thread, head over to http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5-5a?rq=1[^].

                      The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                      P Offline
                      P Offline
                      Plamen Dragiyski
                      wrote on last edited by
                      #26

                      The compiler doesn't do a + 5, it is worse than that - it does a + 5 * sizeof(5), so 5[a] becomes 5 + a * sizeof(a), which is OK, since a is a pointer, and pointers are integers that can be added and multiplied. Learning something new about Haskell is like buying a new clothes. Learning something new about C/C++ is like discovering the nuclear reaction - it can change you and not always for good. Please, please, don't get twisted, don't go into C/C++ land! :)

                      1 Reply Last reply
                      0
                      • A Afzaal Ahmad Zeeshan

                        I am going to have an exam of C++ tomorrow, so I thought why not just open the book, swap pages from one to the last one, then close it and go back to Haskell once again. But while I did, I asked myself "Are arrays actually consecutive in memory?". Along with that, I came to another question, "Why is a[5] == 5[a]?" that was something I never knew about before. So, I went searching for the answers and tried it on my own machine too, to make my mind actually believe that I was accessing the ath element of array 5. :laugh:

                        int main()
                        {
                        int a[5] = {1, 2, 3, 4, 5};
                        for (int i = 0; i < 5; i++) {
                        std::cout << i[a] << ", ";
                        }
                        std::cout << std::endl;
                        system("pause");
                        return 0;
                        }
                        // Output: 1, 2, 3, 4, 5,

                        For those who didn't know it (just like me!) the logic is that C (or C++) translates a[5] to *(a + 5) and then gets the data from that location. Which, is similar to having 5[a] that gets translated to *(5 + a). Mathematically, we know 5 + a == a + 5. Thus, compiler accepted that. I hope, I am not alone who didn't know it yet. :laugh: I can say I know nothing of C or C++. For those who want to read a thread, head over to http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5-5a?rq=1[^].

                        The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                        K Offline
                        K Offline
                        Kirk 10389821
                        wrote on last edited by
                        #27

                        Thanks, This was the question I used on applicants who claimed (on a scale of 1..10) a level 9 or 10 knowledge of the C language. Also, I believe a[5] == *(a+5) Because a[5] gives you the VALUE, not the pointer to the value The rule as I learned it, is every [] => * level of de-referencing.

                        1 Reply Last reply
                        0
                        • B BillWoodruff

                          Afzaal Ahmad Zeeshan wrote:

                          "frightening" in the sense of?

                          I'd say it's about the same way as I feel looking in a mirror: that sense that what is on the surface is a very bad cover-up of something strange, and probably up to no good :)

                          «I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.

                          A Offline
                          A Offline
                          Afzaal Ahmad Zeeshan
                          wrote on last edited by
                          #28

                          Well, learning C at this era is also upto no good. But, it is worth a shot. :-) Using your example, I would be much more interested in the "man inside" rather than the bad cover-up.

                          The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                          1 Reply Last reply
                          0
                          • Sander RosselS Sander Rossel

                            Afzaal Ahmad Zeeshan wrote:

                            there are many frameworks and systems that a programmer must know

                            The average programmer only needs to know a few (and knows less) :) It's good to know a bit about everything because every new language or framework gives you a new perspective on the ones you already knew. For example, knowing Haskell made me really appreciate C# again! :laugh:

                            Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

                            Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

                            Regards, Sander

                            A Offline
                            A Offline
                            Afzaal Ahmad Zeeshan
                            wrote on last edited by
                            #29

                            Actually its been awhile since I have programmed in C# or .NET framework. I have been on a tour for C/C++, cross-platform Java, Haskell and Shell programming. IDEs like, Qt, Eclipse (on Linux) and Text editors to write code (without any syntax highlighting) to be compiled using command line compilers and so on. No doubt, Microsoft has provided us with great tools and languages for programming. Going into native-ness is sometimes pain. ;)

                            The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                            Sander RosselS 1 Reply Last reply
                            0
                            • S Super Lloyd

                              Nah! It's for C++ people. Those people love those kind of shoot in your own foot kind of tricks! Show the world that only real man (and real woman too, of course) dare to C++! :laugh: :rolleyes:

                              All in one Menu-Ribbon Bar DirectX for WinRT/C# since 2013! Taking over the world since 1371!

                              F Offline
                              F Offline
                              fglenn
                              wrote on last edited by
                              #30

                              "C allows you to shoot yourself in the foot. C++ makes it harder, but if you succeed, it will take off your whole leg!" - Unknown

                              Fletcher Glenn

                              O 1 Reply Last reply
                              0
                              • A Afzaal Ahmad Zeeshan

                                Actually its been awhile since I have programmed in C# or .NET framework. I have been on a tour for C/C++, cross-platform Java, Haskell and Shell programming. IDEs like, Qt, Eclipse (on Linux) and Text editors to write code (without any syntax highlighting) to be compiled using command line compilers and so on. No doubt, Microsoft has provided us with great tools and languages for programming. Going into native-ness is sometimes pain. ;)

                                The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                                Sander RosselS Offline
                                Sander RosselS Offline
                                Sander Rossel
                                wrote on last edited by
                                #31

                                You masochist, you! :laugh:

                                Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

                                Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

                                Regards, Sander

                                A 1 Reply Last reply
                                0
                                • Sander RosselS Sander Rossel

                                  You masochist, you! :laugh:

                                  Visit my blog at Sander's bits - Writing the code you need. Or read my articles at my CodeProject profile.

                                  Simplicity is prerequisite for reliability. — Edsger W. Dijkstra

                                  Regards, Sander

                                  A Offline
                                  A Offline
                                  Afzaal Ahmad Zeeshan
                                  wrote on last edited by
                                  #32

                                  Quote:

                                  You masochist, you! Laugh | :laugh:

                                  I'll take that as a compliment. :rose: ;)

                                  The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                                  1 Reply Last reply
                                  0
                                  • A Afzaal Ahmad Zeeshan

                                    I am going to have an exam of C++ tomorrow, so I thought why not just open the book, swap pages from one to the last one, then close it and go back to Haskell once again. But while I did, I asked myself "Are arrays actually consecutive in memory?". Along with that, I came to another question, "Why is a[5] == 5[a]?" that was something I never knew about before. So, I went searching for the answers and tried it on my own machine too, to make my mind actually believe that I was accessing the ath element of array 5. :laugh:

                                    int main()
                                    {
                                    int a[5] = {1, 2, 3, 4, 5};
                                    for (int i = 0; i < 5; i++) {
                                    std::cout << i[a] << ", ";
                                    }
                                    std::cout << std::endl;
                                    system("pause");
                                    return 0;
                                    }
                                    // Output: 1, 2, 3, 4, 5,

                                    For those who didn't know it (just like me!) the logic is that C (or C++) translates a[5] to *(a + 5) and then gets the data from that location. Which, is similar to having 5[a] that gets translated to *(5 + a). Mathematically, we know 5 + a == a + 5. Thus, compiler accepted that. I hope, I am not alone who didn't know it yet. :laugh: I can say I know nothing of C or C++. For those who want to read a thread, head over to http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5-5a?rq=1[^].

                                    The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                                    S Offline
                                    S Offline
                                    SeattleC
                                    wrote on last edited by
                                    #33

                                    Here's my favorite obscure C/C++ array trick, to print hex digits.

                                    std::uint8_t byte
                                    char code[3] = 0;
                                    ...
                                    code[0] = "0123456789ABCDEF"[byte >> 8];
                                    code[1] = "0123456789ABCDEF"[byte & 0xf];
                                    std::cout << code;

                                    1 Reply Last reply
                                    0
                                    • A Afzaal Ahmad Zeeshan

                                      I am going to have an exam of C++ tomorrow, so I thought why not just open the book, swap pages from one to the last one, then close it and go back to Haskell once again. But while I did, I asked myself "Are arrays actually consecutive in memory?". Along with that, I came to another question, "Why is a[5] == 5[a]?" that was something I never knew about before. So, I went searching for the answers and tried it on my own machine too, to make my mind actually believe that I was accessing the ath element of array 5. :laugh:

                                      int main()
                                      {
                                      int a[5] = {1, 2, 3, 4, 5};
                                      for (int i = 0; i < 5; i++) {
                                      std::cout << i[a] << ", ";
                                      }
                                      std::cout << std::endl;
                                      system("pause");
                                      return 0;
                                      }
                                      // Output: 1, 2, 3, 4, 5,

                                      For those who didn't know it (just like me!) the logic is that C (or C++) translates a[5] to *(a + 5) and then gets the data from that location. Which, is similar to having 5[a] that gets translated to *(5 + a). Mathematically, we know 5 + a == a + 5. Thus, compiler accepted that. I hope, I am not alone who didn't know it yet. :laugh: I can say I know nothing of C or C++. For those who want to read a thread, head over to http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5-5a?rq=1[^].

                                      The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                                      B Offline
                                      B Offline
                                      Brian J Rothwell
                                      wrote on last edited by
                                      #34

                                      For the record, this behavior is part of C since K&R. It exists in C++ for backward compatibility. I am not an objective-C guy, but suspect it has same behavior.

                                      1 Reply Last reply
                                      0
                                      • F fglenn

                                        "C allows you to shoot yourself in the foot. C++ makes it harder, but if you succeed, it will take off your whole leg!" - Unknown

                                        Fletcher Glenn

                                        O Offline
                                        O Offline
                                        onemorechance
                                        wrote on last edited by
                                        #35

                                        fglenn wrote:

                                        Unknown

                                        It actually is known ... Bjarne Stroustrup: http://www.stroustrup.com/bs_faq.html#really-say-that[^]

                                        1 Reply Last reply
                                        0
                                        • A Afzaal Ahmad Zeeshan

                                          I am going to have an exam of C++ tomorrow, so I thought why not just open the book, swap pages from one to the last one, then close it and go back to Haskell once again. But while I did, I asked myself "Are arrays actually consecutive in memory?". Along with that, I came to another question, "Why is a[5] == 5[a]?" that was something I never knew about before. So, I went searching for the answers and tried it on my own machine too, to make my mind actually believe that I was accessing the ath element of array 5. :laugh:

                                          int main()
                                          {
                                          int a[5] = {1, 2, 3, 4, 5};
                                          for (int i = 0; i < 5; i++) {
                                          std::cout << i[a] << ", ";
                                          }
                                          std::cout << std::endl;
                                          system("pause");
                                          return 0;
                                          }
                                          // Output: 1, 2, 3, 4, 5,

                                          For those who didn't know it (just like me!) the logic is that C (or C++) translates a[5] to *(a + 5) and then gets the data from that location. Which, is similar to having 5[a] that gets translated to *(5 + a). Mathematically, we know 5 + a == a + 5. Thus, compiler accepted that. I hope, I am not alone who didn't know it yet. :laugh: I can say I know nothing of C or C++. For those who want to read a thread, head over to http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5-5a?rq=1[^].

                                          The shit I complain about It's like there ain't a cloud in the sky and it's raining out - Eminem ~! Firewall !~

                                          W Offline
                                          W Offline
                                          Weylyn Cadwell
                                          wrote on last edited by
                                          #36

                                          I've had to use this knowledge before for an interview. They wanted me to explain how an array could be a constant lookup, and how they worked. This example is extremely good for just being able to understand how an array stores memory and how is accesses it.

                                          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