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. All in - pointer declaration

All in - pointer declaration

Scheduled Pinned Locked Moved The Lounge
39 Posts 19 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 jschell

    Single Step Debugger wrote:

    Type* p;

    As I recall it there was a column from I believe the 'C++ Users Journal' which pointed out that the following...

    int i;

    Is the same as

    So thus a pointer should be laid out as specified in the same way. That is if one needs a rationalization for it.

    T Offline
    T Offline
    trønderen
    wrote on last edited by
    #23

    Yeah, but in

    int x, *y;

    is the * part of the type declaration or the variable declaration? If it is part of the type declaration, then type of y is declared in two parts, with an interspersed (and rather irrelevant) variable declaration. Is that very rational? It is valid C!

    J 1 Reply Last reply
    0
    • S Single Step Debugger

      Type *p;

      or

      Type* p;

      or even

      Type * p;

      Me personally, I do whatever is the current company naming conventions.

      There is only one Vera Farmiga and Salma Hayek is her prophet! Advertise here – minimum three posts per day are guaranteed.

      G Offline
      G Offline
      Gary R Wheeler
      wrote on last edited by
      #24

      I've always preferred "Type  *p" over "Type*  p". To my mind the "pointer-ness" is a property of the variable and not the type. Of course, I've also hated this: typedef Type* TypePtr. If values are declared as TypePtr and you are using pointer-dereferencing with those values, the typedef obfuscates the original type. And before anyone pops up with "but what about...", I think typedef BaseType* OpaqueType is perfectly fine, when you're not using values of OpaqueType as pointers.

      Software Zen: delete this;

      Greg UtasG 1 Reply Last reply
      0
      • G Gary R Wheeler

        I've always preferred "Type  *p" over "Type*  p". To my mind the "pointer-ness" is a property of the variable and not the type. Of course, I've also hated this: typedef Type* TypePtr. If values are declared as TypePtr and you are using pointer-dereferencing with those values, the typedef obfuscates the original type. And before anyone pops up with "but what about...", I think typedef BaseType* OpaqueType is perfectly fine, when you're not using values of OpaqueType as pointers.

        Software Zen: delete this;

        Greg UtasG Offline
        Greg UtasG Offline
        Greg Utas
        wrote on last edited by
        #25

        A problem with

        typedef Type* TypePtr;

        is that if you declare

        const TypePtr p;

        it is p (the pointer itself) that is const, not Type. This can be confusing, so I avoid it.

        Robust Services Core | Software Techniques for Lemmings | Articles
        The fox knows many things, but the hedgehog knows one big thing.

        <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
        <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

        G 1 Reply Last reply
        0
        • M Mircea Neacsu

          type* (pointer is part of type) Now moving on: do you do "west const" or "east const"? Standard C++[^] (surely a lot of people - me included - don't want to do productive work today)

          Mircea

          H Offline
          H Offline
          honey the codewitch
          wrote on last edited by
          #26

          constexpr static const int life_the_universe_and_everything = 42;

          :-\

          To err is human. Fortune favors the monsters.

          M 1 Reply Last reply
          0
          • Greg UtasG Greg Utas

            A problem with

            typedef Type* TypePtr;

            is that if you declare

            const TypePtr p;

            it is p (the pointer itself) that is const, not Type. This can be confusing, so I avoid it.

            Robust Services Core | Software Techniques for Lemmings | Articles
            The fox knows many things, but the hedgehog knows one big thing.

            G Offline
            G Offline
            Gary R Wheeler
            wrote on last edited by
            #27

            Good point. To my thinking const-ness, like pointer-ness, are properties of the variable and not the type. Part of my dislike for that sort of thing is people use some kind of naming convention (xxxPtr, xxxCPtr,...) that indicates the variant of the type. It pollutes the name space with additional identifiers you need to recognize. This replaces fundamental language syntax which is consistent by definition with arbitrary naming that may or may not be consistent. I've also noticed that the typedef overusers also tend to cast those types, often using language syntax, to other typedef's they've forgotten.

            Software Zen: delete this;

            Greg UtasG 1 Reply Last reply
            0
            • H honey the codewitch

              constexpr static const int life_the_universe_and_everything = 42;

              :-\

              To err is human. Fortune favors the monsters.

              M Offline
              M Offline
              Mircea Neacsu
              wrote on last edited by
              #28

              Didn't expect less: west coast, shall be west const ;P

              Mircea

              1 Reply Last reply
              0
              • S Single Step Debugger

                Type *p;

                or

                Type* p;

                or even

                Type * p;

                Me personally, I do whatever is the current company naming conventions.

                There is only one Vera Farmiga and Salma Hayek is her prophet! Advertise here – minimum three posts per day are guaranteed.

                J Offline
                J Offline
                jmaida
                wrote on last edited by
                #29

                Thanx for this introduction to computer language pointer constructs specifically related to C. True C++, C# are involved. The string of discussion was quite interesting.

                "A little time, a little trouble, your better day" Badfinger

                1 Reply Last reply
                0
                • S Single Step Debugger

                  Type *p;

                  or

                  Type* p;

                  or even

                  Type * p;

                  Me personally, I do whatever is the current company naming conventions.

                  There is only one Vera Farmiga and Salma Hayek is her prophet! Advertise here – minimum three posts per day are guaranteed.

                  D Offline
                  D Offline
                  den2k88
                  wrote on last edited by
                  #30

                  I never met any convention that specifies pointer declarations so I use

                  Type* p;

                  I learnt with Type *p; but I always found it more complex to understand: after all that identifier holds a pointer to p, so it's type is pointer. Same for Type** p. Only sometimes I mix them around if there are readability reasons, for example Type** *p; can be in my opinion more readable if p holds a pointer to a matrix (i.e. if you need to return a matrix allocated by the callee, switch the matrix to send to the callee based on something, etc).

                  GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                  1 Reply Last reply
                  0
                  • K k5054

                    type *p;

                    Because

                    type* p, q

                    doesn't do what it looks like it does. Of course, that kicks off the argument about multiple variables per type declaration.

                    Keep Calm and Carry On

                    D Offline
                    D Offline
                    den2k88
                    wrote on last edited by
                    #31

                    k5054 wrote:

                    Of course, that kicks off the argument about multiple variables per type declaration.

                    Not an argument: don't do that.

                    GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                    1 Reply Last reply
                    0
                    • H honey the codewitch

                      I generally agree with you, but I am not all in on that agreement, if that makes sense. Here's why: You have to look up a typedef to know what it is, and typedefs everywhere make it harder to know what's going on until you can adopt the fundamental lexicon that your typedefs essentially create. That said, everything you wrote is valid. I just think there are places where it might be overkill.

                      To err is human. Fortune favors the monsters.

                      D Offline
                      D Offline
                      den2k88
                      wrote on last edited by
                      #32

                      Working with autogenerated code from both MATLAB ans AutoSAR really teaches how much typedef and define complicate the code. Sometimes you have seven or eight redefinitions - it's Hell on Earth.

                      GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                      R 1 Reply Last reply
                      0
                      • D den2k88

                        Working with autogenerated code from both MATLAB ans AutoSAR really teaches how much typedef and define complicate the code. Sometimes you have seven or eight redefinitions - it's Hell on Earth.

                        GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                        R Offline
                        R Offline
                        Rage
                        wrote on last edited by
                        #33

                        AutoSAR ? You doing automotive development ?

                        Do not escape reality : improve reality !

                        D 1 Reply Last reply
                        0
                        • R Rage

                          AutoSAR ? You doing automotive development ?

                          Do not escape reality : improve reality !

                          D Offline
                          D Offline
                          den2k88
                          wrote on last edited by
                          #34

                          Yep, though I'm not touching AutoSAR since a couple of years - I moved to lower level peripherals that run on TLE987x and similar.

                          GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                          R 1 Reply Last reply
                          0
                          • D den2k88

                            Yep, though I'm not touching AutoSAR since a couple of years - I moved to lower level peripherals that run on TLE987x and similar.

                            GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                            R Offline
                            R Offline
                            Rage
                            wrote on last edited by
                            #35

                            Now this is interesting, since I am working on that exact Infineon family as well !

                            Do not escape reality : improve reality !

                            D 1 Reply Last reply
                            0
                            • R Rage

                              Now this is interesting, since I am working on that exact Infineon family as well !

                              Do not escape reality : improve reality !

                              D Offline
                              D Offline
                              den2k88
                              wrote on last edited by
                              #36

                              It's the golden standard, it's HV driver protections are second to none and the RTE is flawless.

                              GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++*      Weapons extension: ma- k++ F+2 X

                              1 Reply Last reply
                              0
                              • G Gary R Wheeler

                                Good point. To my thinking const-ness, like pointer-ness, are properties of the variable and not the type. Part of my dislike for that sort of thing is people use some kind of naming convention (xxxPtr, xxxCPtr,...) that indicates the variant of the type. It pollutes the name space with additional identifiers you need to recognize. This replaces fundamental language syntax which is consistent by definition with arbitrary naming that may or may not be consistent. I've also noticed that the typedef overusers also tend to cast those types, often using language syntax, to other typedef's they've forgotten.

                                Software Zen: delete this;

                                Greg UtasG Offline
                                Greg UtasG Offline
                                Greg Utas
                                wrote on last edited by
                                #37

                                I often define a typedef for a template instantiation, to keep the type succinct:

                                typedef std::unique_ptr ClassPtr;
                                typedef std::vector ClassPtrVector;

                                And then there are things like

                                typedef int main_t; // returned by main()
                                typedef int signal_t; // a POSIX signal
                                typedef uint16_t ipport_t; // an IP port number

                                which do a much better job than simple int types when documenting, or searching for, data and functions that deal with these things.

                                Robust Services Core | Software Techniques for Lemmings | Articles
                                The fox knows many things, but the hedgehog knows one big thing.

                                <p><a href="https://github.com/GregUtas/robust-services-core/blob/master/README.md">Robust Services Core</a>
                                <em>The fox knows many things, but the hedgehog knows one big thing.</em></p>

                                1 Reply Last reply
                                0
                                • P PIEBALDconsult

                                  (Lights his torch.)

                                  O Offline
                                  O Offline
                                  obermd
                                  wrote on last edited by
                                  #38

                                  Is that to pop the popcorn?

                                  1 Reply Last reply
                                  0
                                  • T trønderen

                                    Yeah, but in

                                    int x, *y;

                                    is the * part of the type declaration or the variable declaration? If it is part of the type declaration, then type of y is declared in two parts, with an interspersed (and rather irrelevant) variable declaration. Is that very rational? It is valid C!

                                    J Offline
                                    J Offline
                                    jschell
                                    wrote on last edited by
                                    #39

                                    The discussion is subjective as was the opinion of the columnist to which I referred. But as an authoritative opinion (as a columnist) the argument did provide a specific rationalization.

                                    trønderen wrote:

                                    int x, *y;

                                    I don't code using that form. And I very, very seldom see it used or even a case where it might be used. So as a rationalization for doing it all the time it does not seem to be very valid.

                                    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