Machine-translated by Google. Questions are authored in English.
Top

Discussion

Assume integer is 2 bytes wide. What will be the output of the following code?

#include <stdio.h>
#include <stdlib.h>
#define MAXROW 3
#define MAXCOL 4

int main()
{
    int (*p)[MAXCOL];
    p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
    printf("%d, %d\n", sizeof(p), sizeof(*p));
    return 0;
}

 

  • A.2, 8
  • B.4, 16
  • C.8, 24
  • D.16, 32

Answer: A

Correct answer: 2, 8

Two different quantities are being measured. sizeof(p) is the size of the pointer itself, which on the 16-bit platform assumed here is 2 bytes.

sizeof(*p) is the size of what it points to - an array of MAXCOL integers:

\[ 4 \times 2 = 8\ \mathrm{bytes} \]

The pair illustrates why sizeof on a pointer almost never gives what a beginner expects: it reports the size of the address, and the pointed-to type must be dereferenced to be measured.

No comment is present. Be the first to comment.
Loading…

Post your comment

Please log in or register to post a comment.