C Programming - Pointers - Discussion

Discussion Forum : Pointers - Find Output of Program (Q.No. 9)
9.
What will be the output of the program if the size of pointer is 4-bytes?
#include<stdio.h>

int main()
{
    printf("%d, %d\n", sizeof(NULL), sizeof(""));
    return 0;
}
2, 1
2, 2
4, 1
4, 2
Answer: Option
Explanation:

In TurboC, the output will be 2, 1 because the size of the pointer is 2 bytes in 16-bit platform.

But in Linux, the output will be 4, 1 because the size of the pointer is 4 bytes.

This difference is due to the platform dependency of C compiler.

Discussion:
27 comments Page 1 of 3.

Rahul Chauhan said:   9 years ago
sizeof("")

Whatever we write in double quotation marks ("") it considers as the string literal. A string literal is a sequence of characters which, taken together, form a null-terminated string.
Each character occupies 1 byte in TurboC and in Linux GCC 2 bytes.

Eg. of string literal
name = "Jack";
Each string literal ends with null-character('/0')
name = "Jack/0"

// Each character occupy 1 byte so, sizeof("Jack") = 5 including null character "Jack/0";
1 byte for each character
J = 1
a = 2
c = 3
k = 4
/0 = 5

If we write ("") means it's string literal with null character("/0").
So, sizeof("") is 1 byte.
1 byte for each character. Here only 1 character it is the null character.
so,
/0 = 1

coming on sizeof(NULL)

NULL is not pointing to anything but we can store the address of any type in place of NULL value and address always occupy two bytes because it is unsigned int. unsigned int occupies 2 bytes like int occupy 2 bytes. It is vary from one platform to another.

Windows TurboC: sizeof(NULL) = 2 and sizeof(char) or sizeof('/0') or sizeof("") = 1
Linux GCC compiler: sizeof(NULL) = 4 and sizeof(char) or sizeof('/0') or sizeof("") = 2

Krishan said:   1 decade ago
NULL is always a pointer which points to nothing.
that's why it will always be of the size of any other pointer i.e. 4 bytes.
but what's interesting is "" is a string constant and sizeof(const string) always returns the string length.
though you can still write

char* szptr = "";
printf("%d",sizeof(szptr));

which will give an output 4. but if you write like this,

char* szptr[] = "";
printf("%d",sizeof(szptr));

which will output 1.

Surender said:   1 decade ago
NULL is macro which is define in stdio.h
#define NULL 0

See the Example :

#include<stdio.h>
#define surender 0

int main()
{
printf("%u",sizeof(surender));
}

Out put : Depends On Complier,
2 : in Turbo C
4 : GCC/VC++

The Displayed size is sizeof(int) actually NULL is a integer constant defined in stdio.h, having value as 0.

Mohan said:   6 years ago
sizeof("") => 1 => because every string in c ended with '\0'(internally) whether it may have characters or not.
sizeof(NULL) =>4 or 2 machine dependent => because NULL is MACRO which is replaced as 0 there fore sizeof(0) = sizeof(int) => integer size may be 2 in turbo c and 4 in GCC compiler.

Jack said:   1 decade ago
Hi Bijan
please find the below
printf("%d",sizeof("jack"));--->5
because j-1
a-2
c-3
k-4
\o-5
similarly printf("%d",sizeof(""));--->1
because "\0" will be included at the end of the string

Anjaneyareddy said:   1 decade ago
@Shraddha.

Here 4, 1 is the correct answer because of sizeof ("") --->sizeof ("\0").

So it will take an one bit value. So it will be print 1 and sizeof (NULL) ----> sizeof (null\0).

n->0.
u->1.
l->2.
l->3 and \0->4.

So the output will become into 4 and 1.

Bijan said:   1 decade ago
If you are not clear with output then sizeof("") is equivalent to sizeof(char) where char value = 0, so it would be 1. However, sizeof(NULL) is implementation defined. So if size(int) then 4.

J.Joel said:   3 years ago
In pointer, the size of int is 4 and the size of string is 1.

So, sizeof(NULL) defines the integer.

size("") is a string because of double courts, also it does not contain any value.
(1)

Vamsi said:   1 decade ago
Here answer is 4, 2 and not 4, 1 because sizeof("") has a string inside and not a char.

So the difference is the extra \0 that's in the string.

So an extra byte is possible for string.

Jakir said:   1 decade ago
#include<stdio.h>

int main()
{
printf("%d, %d\n", sizeof(NULL), sizeof(""));
return 0;
}

I got output as 8 1.

64-bit machine.
(1)


Post your comments here:

Your comments will be displayed after verification.