# If there is no sizeof operator in C



## sumanish (May 11, 2012)

I do not have much knowledge about compilers and all.

I have one simple question about C programming.

If there is no sizeof operator in C then does those pointer arithmetic work or not ?

I am very much confused about it. 

Please somebody help.


----------



## nbaztec (May 14, 2012)

*sizeof *operator is present in C.


----------



## Vyom (May 14, 2012)

sumanish said:


> If there is no sizeof operator in C then does those pointer arithmetic work or not ?



I think you need to read some books. Some good books. Non-Indian authors.


----------



## tkin (May 15, 2012)

I learned about this operator when learning C, when doing dynamic memory allocation, read up on malloc, calloc.


----------



## Liverpool_fan (May 17, 2012)

sizeof - Wikipedia, the free encyclopedia


----------



## Tachy1 (Jun 25, 2012)

yes there is ....if u r having probs using calloc,malloc etc maybe u forgot to use type casting..


----------



## audiophilic (Jun 26, 2012)

It will greatly depend on the compiler you have


----------



## rijinpk1 (Jun 29, 2012)

sizeof() is put by the compiler itself when running pointer arithmatic. Without that, pointer arithmatic wont takeplace. That is what I understand as of now.


----------



## krazylearner (Jul 7, 2012)

hii there i learned this trick back in my college days to find the size of a variable without the use of sizeof() operator .



> #define find_size(x) (((char *)(&x+1))-((char *)(&x)))
> 
> int main(){
> int i;
> ...



It works in almost all cases .Although sizeof () is a operator i think in assembly code it comes down to some piece of more basic code .

 don't ask  how to find size() if we don't have # define 
That i don't know


----------



## nbaztec (Jul 8, 2012)

krazylearner said:


> hii there i learned this trick back in my college days to find the size of a variable without the use of sizeof() operator .
> 
> 
> 
> ...



As cool and hacky as the trick may sound, it's bad code. And not because it does what sizeof() does, but because it is misleading and counter-intuitive. One should take some time out to understand what exactly is happening:

A pointer is nothing but a location to memory, and on a x86 systems it holds a 32-bit address. So effectively it is of type long (4 bytes) = int on x86 architecture.

```
int i = 1337;
	printf("i(%d) is located at %d, next location is %d\n", i, &i, &i+1); 
	printf("Number of memory locations: %d - %d = %d\n", &i+1, &i, &i+1 - &i);
	printf("Number of bytes           : %d - %d = %d\n", &i+1, &i, (long)(&i+1) - (long)&i);

     /**
        * Output
	* i(1337) is located at 1834544, next location is 1834548
	* Number of memory locations: 1834548 - 1834544 = 1
	* Number of bytes           : 1834548 - 1834544 = 4
        */
```

So without typecasting, the difference between 2 pointers yields the no. of elements or memory locations. But once you typecast the pointer to a long, it is treated as a interger type memory location upon which you can perform the usual arithmetic operations. And what better way to get the number of bytes that to get the difference between 2 consecutive addresses.

So you can ditch that hacky macro, which I'm sure originated from some Indian authored book.


----------

