## Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

• Help others & share knowledge
• Earn cash & points
Solved

# Character array..........

Posted on 2003-10-30
215 Views
Hi,

When i compiled the following program, I got "9" as output. I couldnt able to understand the line "p=(buf+1)[5]".  What this line does?

main()
{
char *p;
char buf[10] ={ 1,2,3,4,5,6,9,8};
p = (buf+1)[5];
printf("%d" , p);
}

Thanx.
0
Question by:hemanexp

LVL 10

Expert Comment

ID: 9649408

Now (buf + 1) would give you address of 2nd location i.e. 2

And then (buf+1)[5] means 6th location from (buf+1)

And u are assigning the value at (buf+1)[5] to p

Thus output
0

LVL 5

Accepted Solution

dennis_george earned 20 total points
ID: 9649420
hi,

buf  --> address(pointer to) of the first value of the array

so (buf  + 1 ) --> address of the second member of array (since array data is stored in continuous memory)

an array (buf[x])  can also be represented by

buf[x] --> *(buf + x) --> *(x + buf) --> x[buf] ;

so

(buf + 1)[5] -- > *( (buf +1) + 5) --> *(buf + 6) --> buf[6] --> 6[buf]

Hope you got this

Dennis

0

LVL 5

Expert Comment

ID: 9649439
0

LVL 6

Expert Comment

ID: 9649849
char *p;
char buf[10] ={ 1,2,3,4,5,6,9,8};

//buf[0]    buf[1]      buf[2]      buf[3]     buf[4]   buf[5]  buf[6]    buf[7]  .....
//SAME AS
//buf+0    buf+1      buf+2        buf+3     buf+4    buf+5  buf+6    buf+7  .....
//1          2             3              4            5           6         9         8

//so       (buf+1)[5]  =                                                  VVV
//            pos0        pos1        pos2       pos3      pos4    pos5    pos6

//which is  9

0

Expert Comment

ID: 9663332
hi!

The name of ur array i.e. currently buf, always point to the start of array (logical address) and as u might know that arrays are consecutie memory location.
So if we say that buf is pointing to memory area 1245 (buf -> 1245 ) then there are 10 locations reserved for it (as the space specified was 10) from location 1245 to 1254.

buf[0] -> 1  (memory location 1245)
buf[1] -> 2  (memory location 1246)
.
.
.
buf[9] -> 8  (memory location 1254)

When u write buf[5] it is equivalent that u are pointing five positions ahead from the start of array i.e 1249.
More over (buf+1) is equivalent to buf[1] so wat (buf+1)[5] eventually means fifth location starting from the first location (1246)of array buf. i.e 6th location (1250). thus giving u the value 9.

hope it helps.
regards
fa
0

LVL 5

Expert Comment

ID: 9856308

Dennis
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.