ptrdiff_t, , <stddef.h>. printf t. :
printf("pointer difference: %td\n", ptr - A[42]);
(sizeof(A[0]) / sizeof(A[0][0])) size_t, f - sizeof, <stddef.h>.
printf z. :
printf("array size in bytes: %zu\n", sizeof(A));
ptrdiff_t C, -65535 65535 , size_t 0 65535.
: a ptrdiff_t a size_t?
, 6.3.1.8. :
( ), . :
, ptrdiff_t size_t, :
: int , int, unsigned , unsigned, .
, size_t , int, size_t int, , , int ptrdiff_t (, int).
size_t - unsigned int, ptrdiff_t - int, ptrdiff_t unsigned int, unsigned int.
, size_t - unsigned int, ptrdiff_t - long int, size_t long int, , long int.
size_t - unsigned long int ptrdiff_t - long int (Linux OS/X 64-), ptrdiff_t unsigned long int, - unsigned long int.
size_t unsigned long long int ptrdiff_t long long int (Windows 64-bit), ptrdiff_t unsigned long long int, - unsigned long long int.
size_t ptrdiff_t, , long long int.
, : size_t ptrdiff_t.
printf:
:
printf("row number is %d\n", (int)((ptr - A[0]) / (sizeof(A[0]) / sizeof(A[0][0]))));
:
int row = (ptr - A[0]) / (sizeof(A[0]) / sizeof(A[0][0])));
printf("row number is %d\n", row);
( , size_t , unsigned long long):
printf("row number is %llu\n", 0ULL + (ptr - A[0]) / (sizeof(A[0]) / sizeof(A[0][0])));
, printf %zu size_t %td ptrdiff_t , size_t not ptrdiff_t. Windows, Microsoft C. - , MingW C gcc Windows: -D__USE_MINGW_ANSI_STDIO gcc printf, Microsoft.
: ptr - A[0] undefined, ptr , 6.5.6 :
- , ; .