Как работает этот фрагмент кода? - PullRequest
1 голос
/ 08 июня 2011

Код очень прост, но я почесываю голову от результатов.Я просто играю арифметику указателей и хочу распечатать массив, но я получаю номера массива плюс еще 3.Откуда берутся эти 3 лишних?

#include <stdio.h>


int my_array[] = {1,3,5,6,73,343,34};

int *pointer_numeros;

int main (void) {
int i = 0;  
pointer_numeros = my_array;

while(*pointer_numeros) {

        printf("los numeros del array son %d\t %d\n\n", i++, *pointer_numeros++);

            }

            getchar();
            return 0;

    }   

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

*pointer_numeros не оценивается как ложное в конце массива; он будет продолжать ходить по памяти, пока не достигнет адреса, содержимое которого равно нулю (но это неопределенное поведение ).

Вы можете завершить ваш массив в ноль, как другие предложили. Но в целом у вас все еще будет проблема: что если некоторые из ваших элементов сами по себе равны нулю?

1 голос
/ 08 июня 2011

Вы хотели написать:

int my_array[] = {1,3,5,6,73,343,34,0};

?

Ваш код выполняет итерацию, пока не найдет ноль в массиве.В вашем массиве нет нуля.

0 голосов
/ 08 июня 2011

Ваш цикл остановится только тогда, когда он увидит указатель, указывающий на 0. Исправьте это так:

 int my_array[] = {1,3,5,6,73,343,34,0};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...