pass by address

Discussion in 'C Programming' started by Bill Cunningham, May 2, 2014.

  1. Now there is something new I've never heard of til now from reading a C
    book called "pass by address". Now am I understanding it right. I will use
    this example.

    I think scanf might be like this. The second parameter by wanting a pointer
    is usually passed the address of the pointee using the ampersand (In know
    there's an elipsis there). But a value is decalred and initialized. Their is
    no pointer addresss involved. Is that "pass by address"?

    int a=15;
    scanf("%d\n",&n);

    See no pointer address. But a pointee address is passed. The /value/ is 15.

    Hope I'm clear.
     
    Bill Cunningham, May 2, 2014
    #1
    1. Advertisements

  2. Sorry my mistake. That should've been

    scanf("%d\n",&a);
     
    Bill Cunningham, May 2, 2014
    #2
    1. Advertisements

  3. No value passed. No pointer address passed. If a value were passed
    evidently a dereference would be needed. The value is obtained from the
    passed "address" or a pointee that's not done here by the user anyway.
     
    Bill Cunningham, May 2, 2014
    #3
  4. Bill Cunningham

    Lew Pitcher Guest

    Bill, think about this one a bit....

    int a = 15;
    int *p;

    p = &a;

    printf("%d\n",*p);
    scanf("%d\n",p);
     
    Lew Pitcher, May 2, 2014
    #4
  5. That's really simple to interpret. Anyway. You are passing to printf the
    value stored at the pointee's address. With the scanf you are passing the
    pointer's address. Since pointers can only hold addresses. I would say the
    scanf example is "pass by address" and the printf example is "pass by
    value". Is that right? But with scanf in your example; that's the first time
    I've ever seen the /pointer's/ address passed. Usually it's the /pointee's/
    address using the &. But then that second parameter is an elipses and I
    haven't considered variable argument lists. Way over my head right now
    anyway.

    Bill


    Bill


    Bill
     
    Bill Cunningham, May 2, 2014
    #5
  6. In your terminology, the pointer points to the pointee. So this is
    the same as saying you pass the value of the pointee.
    No. With scanf you are passing the value of the pointer, not its
    address. That value is the address of a, not of p.
    You can, and usually do, say whatever you want but the simple fact is
    that this is pass by value. The value happens to be an address. I
    don't think anyone has ever said pass by int or pass by double so I
    wonder why you consider this particular type of value worthy of
    special terminology.
    Here you don't see the pointer's address passed, you see the pointer's
    value passed. But you have seen a pointer's addressed passed just
    within the past week. Go back and look at your previous messages
    regarding strtol.
    You might have an easier time understanding things if you didn't keep
    throwing in unrelated issues at the last minute. Variable argument
    lists have nothing to do with whether you pass an object's value or
    its address to a function. That decision is based entirely on the
    requirements of the function.
     
    Barry Schwarz, May 3, 2014
    #6
  7. Throw the book away. It is just confusing you.
    Pass by address means whatever you and the author of the book intend
    it to mean. While it is true that there is no pointer OBJECT in this
    code sample, there is a pointer VALUE being passed. The type of the
    expression &n is pointer to int.
    What do you mean by the phrase "no pointer address"? &n is an address
    of type pointer to int.
     
    Barry Schwarz, May 3, 2014
    #7
  8. You might have an easier time understanding things if you didn't keep
    throwing in unrelated issues at the last minute. Variable argument
    lists have nothing to do with whether you pass an object's value or
    its address to a function. That decision is based entirely on the
    requirements of the function.[/QUOTE]

    YHBT

    --
    Modern Christian: Someone who can take time out from
    complaining about "welfare mothers popping out babies we
    have to feed" to complain about welfare mothers getting
    abortions that PREVENT more babies to be raised at public
    expense.
     
    Kenny McCormack, May 3, 2014
    #8
  9. Which happens to be 15.
    That's what I said. The value of a pointer variable is an address. Which
    is the address holding the 15.
    The book said pass by address. It's not my term.
     
    Bill Cunningham, May 3, 2014
    #9
  10. Right but a *pointee's *address is passed. The a which in memory is an
    int. Barry you are making things more confusing than they need to be. I
    posted this to clear things up.

    int a; //address of type in hold's value of 15 a variable.
    int *p; //pointer's address
    p=&a; //pointer's address contain's address of location in memory where
    value is stored.

    printf("%d",*p); // passed to printf value at address pointed to by p.

    Does that make sense? This is the way I'm understanding it.
     
    Bill Cunningham, May 3, 2014
    #10
  11. Bill Cunningham, May 3, 2014
    #11
  12. You have to wonder. My sense (which seems also to be yours) is that they
    know but just don't care. Which is really sad - sadder than if they didn't
    know.

    They might as well be pontificating to /dev/null - but this seems to bother
    them not. Kind of like members of Congress spewing nonsense into the
    Congressional Record at 3 in the morning - benefiting no one as no one is
    listening.

    --
    "The God of the Old Testament is arguably the most unpleasant character
    in all fiction: jealous and proud of it; a petty, unjust, unforgiving
    control-freak; a vindictive, bloodthirsty ethnic cleanser; a misogynistic,
    homophobic, racist, infanticidal, genocidal, filicidal, pestilential,
    megalomaniacal, sadomasochistic, capriciously malevolent bully."

    - Richard Dawkins, The God Delusion -
     
    Kenny McCormack, May 3, 2014
    #12
  13. Barry I'm in no position to argue with you. I am only reading the book.
    It seems to be a little simpler than others I've read. I try. If you say
    there's no "pass by address" then there isn't. That's just what the book's
    calling it. One tells me get a book, another get rid of the book. I
    appreciate the help and that's why I ask but it's hard to connect with
    someone through usenet. I don't expect it to be. Maybe scanf is a bad
    example. I know this is so though...

    int a=15;
    int *p;
    p=&a; // And my compiler complains about that. It calls it old style and
    says = & if I remember right.

    I am not giving up but maybe I shoud "regroup" take a break and reconsider
    or something. Try at a different angle. If at first you don't succeed
    well...They say try again.
     
    Bill Cunningaham, May 3, 2014
    #13
  14. Ok maybe I better back up and take things from another angle. I will be
    studying this week though.
     
    Bill Cunningaham, May 3, 2014
    #14
  15. Bill Cunningaham, May 3, 2014
    #15
  16. Bill Cunningham

    James Kuyper Guest

    On 05/03/2014 11:22 AM, Bill Cunningaham wrote:
    ....

    When did you become "Cunning a ham"? I'll have to fix my filters.
     
    James Kuyper, May 3, 2014
    #16
  17. Yes, nothing we say will ever have any impact on Bill.

    But if some poor newcomer happens upon this group looking for advice,
    I think it would be nice if they could see something that tells them
    to ignore Bill's absurdities.
     
    Barry Schwarz, May 3, 2014
    #17
  18. Really?

    In very early versions of C, the compound assignment operators put
    the "=" before the operator rather than after it. For example,
    the old syntax to subtract 2 from i was
    i =- 2;
    rather than the modern
    i -= 2;

    This caused ambiguities if you didn't use enough whitespace,
    resolved as usual via the "maximal munch" rule. For example:

    i=-2;

    would subtract 2 from i rather than assigning the value -2 to i.
    Problems could occur for any unary operator that uses the same
    symbol as a binary operator that can be part of a compound assignment
    operator.

    The syntax of compound assignment operators was changed before the
    publication of K&R1 in 1978. Some older compilers would warn about
    code that would be parsed differently under the old and new rules.
    I've even used a compiler that would warn about it and then use the
    old interpretation (it recognized modern operators in unambiguous
    cases); fortunately we also had a more modern compiler available.

    Bill, the compiler complaint you describe is consistent with
    your using an old compiler that warns about code whose meaning
    differs between the ancient and modern versions of the language.
    As I recall, you use gcc, which certainly doesn't warn about such
    things by default, and as far as I know cannot even be made to warn
    about them.

    And the code that was suggested to you upthread used:
    p = &a;
    which you changed for some reason to:
    p=&a;

    I'd be interested in knowing exactly what compiler you're using,
    what OS you're using it on, and seeing the exact copy-and-pasted
    diagnostic message from that compiler.
     
    Keith Thompson, May 3, 2014
    #18
  19. (snip)
    I had a compiler that would do that around 1988. (As well as I
    remember, both warn and then do the old way.) For some time,
    I got used to putting in that extra space.

    (My usual convention is not to put space around =, but to put
    it around all the compound assignment operators.)
    Along with the X'1A', it is plenty long ago enough now.

    -- glen
     
    glen herrmannsfeldt, May 3, 2014
    #19
  20. Bill Cunningham

    Kaz Kylheku Guest

    Yes; along with his collection of take-out menus, and washing instructions
    labels on clothing.

    "I think I understand delicate, but why do I have to wash my hands, and
    be standing in cold water when doing it?"
     
    Kaz Kylheku, May 3, 2014
    #20
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.