pointer-arithmetic

Why subtract null pointer in offsetof()?

Linux's stddef.h defines offsetof() as: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) whereas the Wikipedia article on offsetof() (http://en.wikipedia.org/wiki/Offsetof) defines it as: #define offsetof(st, m) \ ((size_t) ( (char *)&((st *)(0))->m - (char *)0 )) Why subtract (char *)0 in the Wikipedia version? I...

Pointer Arithmetic & Signed / Unsigned Conversions!

Incase of pointer arithmetic, are the integers automatically converted to their signed variants? If yes, why? Suppose I do int *pointer; int *pointerdiff; unsigned int uiVal = -1; pointerdiff = pointer + uiVal // Pointer will contain valid address here. where pointer is a pointer to int and uiVal is initialized to -1, then I find...

C - how to convert a pointer in an array to an index?

In the many search functions of C (bsearch comes to mind) if a result is found, a pointer to the spot in the array is returned. How can I convert this pointer to the index in the array that was searched (using pointer arithmetic, i assume). ...

What is `*((char*)ptr+4))` doing ?

#include<stdio.h> main() { int a[]={0,2,4,6,8}; int *ptr; ptr=a; printf("%d", *((char*)ptr+4)); } *((char*)ptr+4)) What is the purpose of this? ...

Substracting pointers: Where does this missing level of indirection come from?

Hi everybody, I'm having trouble understanding the behavior of the MS VC compiler on this one. This line compiles fine, but the result I get is not what I'd expect at all: this->Test((char *)&CS2 - (char *)&CS1 == sizeof(void *)); The CS1 and CS2 arguments are declared as follows: myFunction(tCS1* CS1, tCS2* CS2) {... tCS1 and tCS2...

what is difference between pchar and pbyte

title explains all and why i cant perform this operation var data:pbyte; x:int64; o:pointer; begin o:=data+x; end; thanks in advance regards ...

Order of operations for dereference and bracket-ref in C

If I do *ptr[x], is that equivalent to *(ptr[x]), or (*ptr)[x]? ...

How to resolve pointer alias issues?

Careless use of templates can cause bloat. One way to avoid that bloat is to have a thin typesafe template that wraps non-typesafe non-template code. To do this, the wrapper needs to provide some way for the non-template code to access things it knows nothing about. For example, in a data structure, the wrapper defines the node structs....

void * assignment problem

I want to take some fields from packet struct using pointer arithmetic.But what is wrong with the code below ? In first condition i think if i go 4 byte(2 short field) from beginning of packet i get tLow .But it does not give expected value.Additionally second case i want to get data field by going 12 byte from beginning of packet .What ...