We're a community of 1077K IT Pros here for help, advice, solutions, professional growth and fun. Join us!
1,076,154 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Start New Discussion Reply to this Discussion

difficulty in displaying array contents

Why this piece of code doesnot display array contents

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};

int main()
{
int d;

for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);

return 0;
}
2
Contributors
5
Replies
9 Hours
Discussion Span
5 Months Ago
Last Updated
6
Views
saurabh.mehta.33234
Junior Poster in Training
52 posts since Nov 2012
Reputation Points: 13
Solved Threads: 0
Skill Endorsements: 0

You've stumbled on one of the tricky points of mixing signed and unsigned values. The result of the sizeof operator is unsigned, but d is signed and negative. You can just pretend the comparison looks like this, because that's what actually happens:

for (d = -1; (unsigned)d <= (TOTAL_ELEMENTS - 2); d++)

Given that little tidbit, it's easy to see why the loop doesn't execute, because -1 when converted to unsigned will be a huge value, far greater than TOTAL_ELEMENTS - 2. This is due to the rule of unsigned wrapping. When you go negative, the value wraps around from the largest value.

One possible fix is to force both parts of the comparison to be signed:

for (d = -1; d <= (int)(TOTAL_ELEMENTS - 2); d++)

Another is to avoid starting at -1 in the first place. The following is a conventional counted loop setup that starts at 0 and goes until N-1. It's highly recommended:

for (d = 0; d < TOTAL_ELEMENTS; d++)
    printf("%d\n", array[d]);
deceptikon
Challenge Accepted
Administrator
3,450 posts since Jan 2012
Reputation Points: 822
Solved Threads: 473
Skill Endorsements: 57

Thankyou Sir I am a Beginner in C.So can you suggest any links from where I can download the C99 standard e-book.It would be really helpful.

saurabh.mehta.33234
Junior Poster in Training
52 posts since Nov 2012
Reputation Points: 13
Solved Threads: 0
Skill Endorsements: 0

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

But be forewarned: if you're a beginner to C then you'll likely find the standard obtuse and unhelpful. It's written for compiler writers, not every day users of the language.

deceptikon
Challenge Accepted
Administrator
3,450 posts since Jan 2012
Reputation Points: 822
Solved Threads: 473
Skill Endorsements: 57

Thankyou Sir So according to you which reference book will be suitable for beginner.

saurabh.mehta.33234
Junior Poster in Training
52 posts since Nov 2012
Reputation Points: 13
Solved Threads: 0
Skill Endorsements: 0

C: A Reference Manual and The C Programming Language both have reasonably accessible reference parts. But you can get the same result for the most part with a Google search.

deceptikon
Challenge Accepted
Administrator
3,450 posts since Jan 2012
Reputation Points: 822
Solved Threads: 473
Skill Endorsements: 57

This article has been dead for over three months: Start a new discussion instead

Post: Markdown Syntax: Formatting Help
 
You
 
© 2013 DaniWeb® LLC
Page rendered in 0.0806 seconds using 2.68MB