Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| Path | csiph.com!news.mixmin.net!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail |
|---|---|
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
| Newsgroups | comp.std.c |
| Subject | Re: why can change element of a const typed struct ? |
| Date | Mon, 18 Sep 2023 20:58:52 +0100 |
| Organization | A noiseless patient Spider |
| Lines | 48 |
| Message-ID | <871qevjls3.fsf@bsb.me.uk> (permalink) |
| References | <6d826a46-8852-4aa3-9e7d-23fac761e840n@googlegroups.com> <uea4ti$1stu4$1@dont-email.me> |
| MIME-Version | 1.0 |
| Content-Type | text/plain |
| Injection-Info | dont-email.me; posting-host="4a1f049c3c0d7d3aa42e2e5e10f8a54b"; logging-data="2032392"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+chBaqD+BAY1H5qe8OudkLuaeFJB69c64=" |
| User-Agent | Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) |
| Cancel-Lock | sha1:jf8kb83TaKKBKks/tNm5YY17iDM= sha1:MRr6vyNir0j0x0jNDnQIBg3nFng= |
| X-BSB-Auth | 1.1b1cfb700a7672da24e7.20230918205852BST.871qevjls3.fsf@bsb.me.uk |
| Xref | csiph.com comp.std.c:6573 |
Show key headers only | View raw
David Brown <david.brown@hesbynett.no> writes: > On 18/09/2023 17:49, Denis Dos Santos Silva wrote: >> hi all! >> why this works? =) > > Your image_t is const, but it has a non-const pointer "data" - there is no > restriction to accessing the elements pointed to by source->data. I feel I must quibble because it can matter to someone learning C. When accessed via 'const image_t *source', data /is/ (treated as) const. data is a pointer, and the lvalue expression source->data is const qualified. To call it a "non-const pointer" is using a common shorthand, but one I've found is very confusing to beginners. We casually talk about "const pointers" and "non-const pointers" because we all know what we mean, but people learning C can get confused by what is and is not const-qualified. It's a handy shorthand because an actual 'const pointer' is not seen so often: char *const endp = start + strlen(start); But we often see this const char *end = start + strlen(start); described as a const pointer even though changing the pointer is perfectly valid: end -= 1; // permitted because end is pointer that is not const > So your function can't change "source->data", Right, because data is treated as a const pointer. Calling it a non-const pointer is potentially confusing. I know what you meant, but is it clear to everyone? > but it /can/ change "source->data[sindex]". > > "const" does not pass through layers of pointers, it only applies to the > first pointed-at layer. Your remark suggests that there is something special about one level of indirection, but there isn't. -- Ben.
Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar
why can change element of a const typed struct ? Denis Dos Santos Silva <denis@roo.com.br> - 2023-09-18 08:49 -0700
Re: why can change element of a const typed struct ? David Brown <david.brown@hesbynett.no> - 2023-09-18 20:29 +0200
Re: why can change element of a const typed struct ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-09-18 20:58 +0100
Re: why can change element of a const typed struct ? David Brown <david.brown@hesbynett.no> - 2023-09-19 17:15 +0200
Re: why can change element of a const typed struct ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2023-09-18 20:13 +0100
csiph-web