INFO: A Case Where BUFF[] and *BUFF Are Different

ID: Q38024


The information in this article applies to:
  • The C/C++ Compiler (CL.EXE), included with:
    • Microsoft C for MS-DOS, versions 5.1, 6.0, 6.0a, 6.0ax
    • Microsoft C/C++ for MS-DOS
    • Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5
    • Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0, 5.0, 6.0

When the variable buff has been declared in an assembly-language program, such as the following

        .data
        public buff
_buff   db 200 dup (0xab)
        .data ends 
there is a difference between the two following C declarations:

   extern unsigned char buff[];

   extern unsigned *buff; 


The difference is that the first declaration says there is a block of memory that is named buff; the second says there is something called buff that is a pointer.

This difference can be seen by referencing buff as follows:

   buff[x] 
If buff is declared as an array, the referencing is correct.

However, if buff is declared as a pointer, the referencing is incorrect. The data pointed to by buff (ab in this example) is translated into a memory address, then x bytes are added to it generating an incorrect reference.

For additional information, please see the following articles in the Microsoft Knowledge Base:
Q44463 Difference Between Arrays and Pointers in C

Additional query words:

Keywords : kbLangC kbVC kbVC100 kbVC150 kbVC151 kbVC152 kbVC200 kbVC210 kbVC400 kbVC500 kbVC600
Version : winnt:1.0,2.0,2.1,4.0,5.0,6.0
Platform : winnt
Issue type : kbinfo


Last Reviewed: July 15, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.