Why isn't it legal to convert "pointer to pointer to non-const" to a "pointer to pointer to const"

why isn't my brain working pdf
why isn't my brain working audiobook
why isn't my brain working reddit
why isn't the netherlands underwater ted talk
netflix error code
netflix error nses-504
is netflix down or is it just me
nses-504 netflix error code

It is legal to convert a pointer-to-non-const to a pointer-to-const.

Then why isn't it legal to convert a pointer to pointer to non-const to a pointer to pointer to const?

E.g., why is the following code illegal:

char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char **ps = a; // error!

From the standard:

const char c = 'c';
char* pc;
const char** pcc = &pc;   // not allowed
*pcc = &c;
*pc = 'C';                // would allow to modify a const object

Why isn't the Netherlands underwater? - Stefan Al, Due to the COVID-19 crisis thousands of our customer support agents are unable to work or are now having to work from home, so wait times may be longer  Why Isn’t There a Diet That Works for Everyone? Credit Illustration by Ori Toor. “It’s also why there have been so many conflicting studies in nutrition,” Mayer-Davis says. “The

Ignoring your code and answering the principle of your question, see this entry from the comp.lang.c FAQ: Why can't I pass a char ** to a function which expects a const char **?

The reason that you cannot assign a char ** value to a const char ** pointer is somewhat obscure. Given that the const qualifier exists at all, the compiler would like to help you keep your promises not to modify const values. That's why you can assign a char * to a const char *, but not the other way around: it's clearly safe to "add" const-ness to a simple pointer, but it would be dangerous to take it away. However, suppose you performed the following more complicated series of assignments:

const char c = 'x';    /* 1 */
char *p1;              /* 2 */
const char **p2 = &p1; /* 3 */
*p2 = &c;              /* 4 */
*p1 = 'X';             /* 5 */

In line 3, we assign a char ** to a const char **. (The compiler should complain.) In line 4, we assign a const char * to a const char *; this is clearly legal. In line 5, we modify what a char * points to--this is supposed to be legal. However, p1 ends up pointing to c, which is const. This came about in line 4, because *p2 was really p1. This was set up in line 3, which is an assignment of a form that is disallowed, and this is exactly why line 3 is disallowed.

And as your question is tagged C++ and not C, it even explains what const qualifiers to use instead:

(C++ has more complicated rules for assigning const-qualified pointers which let you make more kinds of assignments without incurring warnings, but still protect against inadvertent attempts to modify const values. C++ would still not allow assigning a char ** to a const char **, but it would let you get away with assigning a char ** to a const char * const *.)

Why Isn't Netflix Working, Why Isn't Pluta a Planet? For more than 75 years, Pluto was called the ninth planet. But in 2006, astronomers decided a planet needed to be the only large  In "News Is Just Like Waste Management," Mother Jones CEO Monika Bauerlein explains how the coronavirus crisis is impacting our journalism and why we need to raise $400,000 to help cover all of

Just since nobody has posted the solution, here:

char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char * const*ps = a; // no error!

(http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17 for why)

Stefan Al: Why isn't the Netherlands underwater?, Why Isn't My Brain Working?: A Revolutionary Understanding of Brain Decline and Effective Strategies to Recover Your Brain's Health: 8601420672192:  On Sunday, Virginia Democratic Gov. Ralph Northam signed into law a measure that, among other things, makes Election Day a state holiday in the commonwealth.

Why Isn't Pluto a Planet?: A Book about Planets, Amazon.com: Why Isn't My Brain Working?: A revolutionary understanding of brain decline and effective strategies to recover your brain's health eBook:  Either risk is reduced or it isn’t. If so — and that’s clearly the case for many if not most people — then it makes no sense for policyholders to pay the same premiums they shelled out

Why Isn't My Brain Working?: A Revolutionary Understanding of , Thomas L. Waldron. Why Isn't AL GORE PRESIDENT? A View ofthe Millem'um Election flom 2004 THOMAS L. WALDRON WHY ISN'T AL GORE PRESIDENT? But that isn’t true for every interesting set of numbers. As an example, let’s look at the set of numbers of the form a + b √-5, or a +i b √5, where a and b are both integers and i is the

Why Isn't My Brain Working?: A revolutionary , It isn't even a pretty picture in the Temple of GOD. Yahshua, the Messiah is being fazed out of American religion. Jesus no longer holds the standard for America. Unlike the hard drive that ships with an off-the-shelf computer or external drive, extra hard drives you purchase aren’t always shipped formatted and ready to use. Instead, they’re in a totally blank state–the idea is that the end user will do what they wish with the drive, so there is no benefit to preformatting or otherwise changing the

Why Isn't Al Gore President?, thing they learned could be summed up with a question one of the students asked: “If this is history, why isn't it boring?” I know that during this unit, my  The Plateau - The Plateau Native Americans lived in the area between Cascade Mountains and the Rocky Mountains. To protect themselves from the cold weather, many built homes that were partly underground. The Great Basin – Stretching across Nevada, Utah, and Colorado, the Native Americans of the Great Basin had to endure a hot and dry climate

Why Isn't Church Biblical?, Here’s a recap of H20’s history on Netflix, why it was removed and where it’s streaming next. Let’s recap. H20: Just Add Water is an older kids series that most will be familiar with when it aired originally on Nickelodeon outside of Australia.

Comments
  • I suggest you define "a" as "char **", your example will be clearer without an unnecessary array.
  • Yes but his question applies as well when a is char**.
  • below explanation is pretty good actually.
  • @MaxShawabkeh it decays to char**, there is no const .
  • Looks like a question I answered was merged w/ this one, see my answer below which is now part of your question.
  • And from the better-known C++ faq: parashift.com/c++-faq-lite/const-correctness.html#faq-18.17
  • It should be noted that it won't work for C, only C++.
  • The question isn't marked c. Is there any other reason for the downvote?
  • Thanks a lot. After reading your answer for a couple of times I finally got it!
  • @AntonTugolukov looks like you question was merged w/ this current one