О типах данных с циклами for с запятыми - PullRequest
0 голосов
/ 08 декабря 2011

В C, если у вас есть следующий код:

for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x) 
{
        // do stuff
} 

Будет ли переменная y также иметь тип size_t или будет int?

Ответы [ 5 ]

5 голосов
/ 08 декабря 2011

объявление

int a,b,c;
size_t x,y,z;

означает, что все a, b, c имеют одинаковый тип (int), как и x, y, z (size_t)

Объявление внутрицикл for ничем не отличается - и в вашем примере оба x и y имеют тип size_t

, однако в вашем примере x не инициализируется (только y установлено на somevalue) - и если тело циклов не установит его на что-то, вы обнаружите, что y -= x даст вам случайный неопределенный результат.

0 голосов
/ 08 декабря 2011
for (size_t x, y = someValue; y > 0; y -= x, ptr1 += x, ptr2 += x) 
    {
            // do stuff
    } 
  1. x и y оба равны "size_t" (обычно 4 байта на большинстве платформ)

  2. y инициализируется как «someValue».

  3. x, однако, неинициализирован.

int main (int argc, char *argv[]) {<br> size_t x, y = 1;<br> printf ("x=%d, y=%d, sizeof(x)=%d...\n", x, y, sizeof (x));<br> return 0; }

x = 4201366, y = 1, sizeof (x) = 4 ...

0 голосов
/ 08 декабря 2011

В вашем примере да; x и y имеют тип size_t. Однако, чтобы добавить к вашей путанице, рассмотрим объявление:

int *x, y;

В этом случае x - это указатель на int, но y - это просто int.

0 голосов
/ 08 декабря 2011

y будет таким же временем, как и x, size_t, так же, как и с тем же выражением вне цикла for:

size_t x, y = someValue;

Один простой способ найтиВыход заключается в том, чтобы просто напечатать размер переменных для себя, пока sizeof(size_t) != sizeof(int) (если это так, просто измените size_t на char, чтобы сделать разницу очевидной).

0 голосов
/ 08 декабря 2011

Это так же, как если бы вы это сделали:

size_t x, y = someValue;

В такой ситуации x и y равны size_t и y = someValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...