Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #163877
| From | Meredith Montgomery <mmontgomery@levado.to> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: on understanding & and pointer arithmetic |
| Date | 2021-12-16 16:42 -0300 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <86ee6c9w1a.fsf@levado.to> (permalink) |
| References | <86a6h0eiy9.fsf@levado.to> <spfi5g$6ko$1@dont-email.me> <865yrod2cx.fsf@levado.to> <87h7b8wind.fsf@bsb.me.uk> |
Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
> Meredith Montgomery <mmontgomery@levado.to> writes:
>
>> Bart <bc@freeuk.com> writes:
>>> On 16/12/2021 14:13, Meredith Montgomery wrote:
>
>>>> I also
>>>> know that /&a/ is the same as /a/.
>>>
>>> The same /what/? Those have the same values but different types
>>> ((T*)[] vs T* where T is a's element type).
>
> In this specific case, char (*)[4] and char *. (T*)[] is not a valid
> type (for some base type T), and even with the syntax corrected (it's
> T(*)[]), it's still wrong because the size is missing. C does have
> array types with no size, but none are relevant to your case.
Thanks for the correction. I'll repeat what you say in my words just to
get a chance that you might verify what I'm saying. When I have an
array such as
char a[] = "hello, world"
which occupies 13 bytes, then a pointer to it is a pointer of type
char (*a)[13]
and that's how we write its type --- although I could omit the letter a
there, perhaps I should, I also think it's okay to write it there. Bart
effectively wrote (char*)[], which is not the same or perhaps not a
valid type at all. That's my understanding now.
>> Oh, so that's at least part of what I didn't know. I'm trying to use
>> this new information to explain the numbers, but I haven't made it
>> yet.
>
> Take care with Bart's replies. He loves to make things sound more
> complicated than then really are, and in this case the types he wrote
> are wrong. Also, pointer to array types are rarely used in C, so while
> it's worth knowing about them, must people learn a lot of C before
> coming across them.
Thanks for the advice. I'm still going to study declarations. I do
think they're pretty difficult, but I believe they don't appear too
often. Brian Kernighan says the same in the book.
>> #include <stdio.h>
>> int main() {
>> char a[] = "abc";
>> printf("a: %lu\n", a);
>> printf("a: %lu\n", a + 3);
>> printf("a: %lu\n", &a + 3);
>> }
>
> With any luck, you compiler should have had lots to say about this
> code. If it did not, turn up the warnings. I'll write it my way with
> comments.
Yes, the warnings were there. In my new experiment I added casts, but
kept the %lu because I wanted to see things in base 10.
> #include <stdio.h>
> int main(void) { // Empty ()s here have a special, archaic, meaning.
> char a[] = "abc";
> // Declare a to be an array of 4 characters initialised with
> // 'a', 'b', 'c' and '\0'.
> printf("a: %p\n", (void *)a);
> // C has a format for pointers (%p), but you must convert the
> // pointer to the expected type of void *.
> printf("a: %p\n", (void *)(a + 3));
> printf("a: %p\n", (void *)(&a + 3));
> }
>
>> %./hello.exe
>> a: 4294954044
>
> This is the address of a -- the address of the first element. Pointers
> in C are addresses with type information.
That's good info! I must keep this in mind --- addresses with type
information. Thank you!
>> a: 4294954047
>
> This is the address of the null at the end of the array. An array name,
> in most contexts, converts to a pointer to the first element, so a here
> is of type char *. Pointer arithmetic is done by adding units of the
> size of the pointed-to type and, since sizeof(char) is 1, that adds
> three.
>
>> a: 4294954056
>
> An array as the operand of & is one of very few cases where the
> conversion to a pointer to the first element does not occur. The result
> is a pointer to the whole four-byte array. Adding 3 therefore adds 3
> times the size of that object, i.e. 12.
Thank you. That's right --- I was expecting a conversion to a pointer
to the first element. I'm much better prepared now. Thanks a lot!
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-16 11:13 -0300
Re: on understanding & and pointer arithmetic Bart <bc@freeuk.com> - 2021-12-16 14:23 +0000
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-16 11:57 -0300
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-16 17:42 +0000
Re: on understanding & and pointer arithmetic Bart <bc@freeuk.com> - 2021-12-16 18:14 +0000
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-16 21:14 +0000
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-16 16:42 -0300
Re: on understanding & and pointer arithmetic Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-12-16 12:44 -0800
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:06 -0300
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-16 21:34 +0000
Re: on understanding & and pointer arithmetic Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-12-16 14:14 -0800
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-16 23:44 +0000
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:09 -0300
Re: on understanding & and pointer arithmetic David Brown <david.brown@hesbynett.no> - 2021-12-16 16:23 +0100
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-16 16:25 -0300
Re: on understanding & and pointer arithmetic David Brown <david.brown@hesbynett.no> - 2021-12-16 21:08 +0100
Re: on understanding & and pointer arithmetic Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-12-16 12:54 -0800
Re: on understanding & and pointer arithmetic David Brown <david.brown@hesbynett.no> - 2021-12-17 10:53 +0100
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 11:39 -0300
Re: on understanding & and pointer arithmetic scott@slp53.sl.home (Scott Lurndal) - 2021-12-18 16:31 +0000
Re: on understanding & and pointer arithmetic David Brown <david.brown@hesbynett.no> - 2021-12-18 18:56 +0100
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-25 21:29 -0300
Re: on understanding & and pointer arithmetic Bart <bc@freeuk.com> - 2021-12-18 18:29 +0000
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 11:32 -0300
Re: on understanding & and pointer arithmetic Manfred <noname@add.invalid> - 2021-12-16 21:34 +0100
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-16 22:20 +0000
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:02 -0300
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:34 -0300
Re: on understanding & and pointer arithmetic Manfred <noname@add.invalid> - 2021-12-18 18:36 +0100
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-18 21:17 +0000
Re: on understanding & and pointer arithmetic James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-12-16 18:59 -0500
Re: on understanding & and pointer arithmetic James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-12-16 18:38 -0500
Re: on understanding & and pointer arithmetic Bart <bc@freeuk.com> - 2021-12-16 23:50 +0000
Re: on understanding & and pointer arithmetic "james...@alumni.caltech.edu" <jameskuyper@alumni.caltech.edu> - 2021-12-17 07:34 -0800
Re: on understanding & and pointer arithmetic Bart <bc@freeuk.com> - 2021-12-17 17:48 +0000
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-16 23:56 +0000
Re: on understanding & and pointer arithmetic James Kuyper <jameskuyper@alumni.caltech.edu> - 2021-12-16 19:06 -0500
Re: on understanding & and pointer arithmetic Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-12-17 00:10 +0000
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:32 -0300
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:30 -0300
Re: on understanding & and pointer arithmetic David Brown <david.brown@hesbynett.no> - 2021-12-17 11:08 +0100
Re: on understanding & and pointer arithmetic Manfred <noname@add.invalid> - 2021-12-17 16:24 +0100
Re: on understanding & and pointer arithmetic David Brown <david.brown@hesbynett.no> - 2021-12-17 18:17 +0100
Re: on understanding & and pointer arithmetic Meredith Montgomery <mmontgomery@levado.to> - 2021-12-18 12:11 -0300
csiph-web