Need Explanation on Lvalue Assignment for the following snippet

P

Pranav

#include<stdio.h>
#include<conio.h>
int main()
{
const int i=6;
int k = 9;
int a, *c = a, *v = a ;
a[2] = 9;

*c++ = *v++; // ( 1 ) This line does not generate any exception /
error
k++ = k++; // ( 2 ) But this line is generating
k++ = 6; // ( 3 ) This Also Generating

getch();
}

Now I know that you cannot assign a value to an expression; But why
does the above (1) expression not generating a exception/error/
warning? and (2) & (3) are generating as they are supposed to. Please
explain this.
Is this due to operator precedence in the case(1), ie the expression
access the value and then assign them and then increment the pointers
and move forward. Correct if I am wrong..,

(I am using DevC++ Compiler for testing)
 
V

vippstar

Richard said:
pete said:
Pranav wrote:
const int i=6;
int k = 9;
int a, *c = a, *v = a ;
a[2] = 9;
*c++ = *v++; // ( 1 ) This line does not generate any exception /
You're assigning a value to (*c) there.
There nothing wrong with that.

Look again! :)

I was just addressing the lvalue issue from the subject line.
The code has other problems too.
I read you other post in this thread.
I think you got them all.


He did not mention <conio.h> and getchr() not being defined by the
standard.
 
N

Nick Keighley

Pranav said:

non-standard header

int main(void)
is better style
{
const int i=6;
int k = 9;
int a, *c = a, *v = a ;


"a" appears to be a C99 VLA (older versions of C
don't support variable length arrays)
a[2] = 9;
*c++ = *v++; // ( 1 ) This line does not generate any exception /
error

Nevertheless, the behaviour of the statement, and therefore the program, is
undefined, because *v++ reads a[0], the value of which is indeterminate.

as c and v point to the same thing wouldn't there be UB even if
a[0] was initialised?

#include <stdio.h>

int main (void)
{
int a [6] = {0};
int *c = a;
int *v = a;

*c++ = *v++; /* UB I believe */
return 0;
}

<snip>
 
W

Willem

Nick Keighley wrote:
) as c and v point to the same thing wouldn't there be UB even if
) a[0] was initialised?
)
) #include <stdio.h>
)
) int main (void)
) {
) int a [6] = {0};
) int *c = a;
) int *v = a;
)
) *c++ = *v++; /* UB I believe */
) return 0;
) }

Nope, that's not UB.


SaSW, Willem
--
Disclaimer: I am in no way responsible for any of the statements
made in the above text. For all I know I might be
drugged or something..
No I'm not paranoid. You all think I'm paranoid, don't you !
#EOT
 
V

vippstar

(e-mail address removed) said:



That's true - I didn't. Feel free to do so yourself.

I don't understand your reply, I did so. If my reply came out as
offensive, it was not my intention. I was not trying to correct you, I
had the genuine intentions of replying to the OP with a full post, but
after seeing yours, the only thing to add was that conio/getch is not
standard.
 
A

Antoninus Twink

I had the genuine intentions of replying to the OP with a full post,
but after seeing yours, the only thing to add was that conio/getch is
not standard.

It's crystal clear that your intention was to be a prissy little
dickhead as usual. If the OP is writing a console program for Windows,
WHY IN THE HELL should he listen to your whining about non-"Standard"
functions THAT HE NEEDS TO USE?
 
R

Richard

Antoninus Twink said:
It's crystal clear that your intention was to be a prissy little
dickhead as usual. If the OP is writing a console program for Windows,
WHY IN THE HELL should he listen to your whining about non-"Standard"
functions THAT HE NEEDS TO USE?

It was blatantly obvious at an early stage that vippstar is only
interested in currying favour with the clique at each and every
opportunity.
 
R

Richard

I don't understand your reply, I did so. If my reply came out as
offensive, it was not my intention. I was not trying to correct you, I
had the genuine intentions of replying to the OP with a full post, but
after seeing yours, the only thing to add was that conio/getch is not
standard.

Try reading the thread before offering advice. It saves a lot of clc
clique in fighting and tedious repeated answers.
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top