2013-12-19 1 views
-1

У меня проблема с указателем void в этой программе (извините, что мне пришлось вскрыть всю программу ...).void pointer in function

#include "stdafx.h" 
void Input_int(int& InputVar, int Min = -2147483647, int Max = 2147483647); 
void Output_array(void* Array, unsigned int ElementNumber, unsigned int Type = 0); 
//Type = 0 => int, 1 => bool. 
bool* Convert_decimal_to_binary(int n); 

void main() 
{ 
    int n; 
    bool* binary; 
    Input_int(n, -255, 255); 
    binary = Convert_decimal_to_binary(n); 
    printf("Binary's address: %d\n", binary); 
    Output_array(binary, 8, 1); 
} 

void Input_int(int& InputVar, int Min, int Max) 
{ 
    do { 
     printf("Please input an integer in range [%d;%d]: ", Min, Max); 
     scanf_s("%u", &InputVar); 
     if (InputVar > Max || InputVar < Min) printf("Your number is out of the range!\n"); 
    } while (InputVar > Max || InputVar < Min); 
} 

bool* Convert_decimal_to_binary(int n) 
{ 
    static bool Array[8]; 
    bool finishplus = false; 
    if (n < 0) 
    { 
     int i; 
     for (i = 7; i >= 0; i--) 
     { 
      if (n % 2 == 0) Array[i] = 0; 
      else { 
       if (!finishplus) 
       { 
        Array[i] = 0; 
        finishplus = true; 
       } 
       else 
        Array[i] = 1; 
      } 
      n = n/2; 
     } 
    } 
    else { 
     for (int i = 0; i < 8; i++) 
     { 
      if (n % 2 == 0) Array[i] = 0; 
      else Array[i] = 1; 
      n = n/2; 
     } 
    } 
    return Array; 
} 
void Output_array(void* Array, unsigned int ElementNumber, unsigned int Type) 
{ 
    if (Type == 0) 
    { 
     int* ArrayR; 
     ArrayR = (int*)Array; 
     for (unsigned int i = 0; i < ElementNumber; i++) 
      printf("Element %d got value: %d\n", i, ArrayR[i]); 
    } 
    else if (Type == 1) 
    { 
     bool* ArrayR; 
     printf("Array's address (in Output_array) before type explicited: %d\n", Array); 
     ArrayR = (bool*)Array; 
     printf("Array's address (in Output_array) after type explicited: %d", Array); 
     for (unsigned int i = 0; i < ElementNumber; i++) 
      printf("%d", i, ArrayR[i]); 
     printf("\n"); 
    } 
} 

Основная проблема здесь на выходах этих 3-х линий:

printf("Binary's address: %d\n", binary); 
printf("Array's address (in Output_array) before type explicited: %d\n", Array); 
printf("Array's address (in Output_array) after type explicited: %d", Array); 

Почему третий выход отличается от других?

Пример:

бинарный по адресу: 11374900.
адрес массива (в Output_array) перед типом explicited: 11374900.
адреса массива (в Output_array) после типа explicited: 11374900.

там, "" всегда появляются.

Заранее благодарен!

+1

Пожалуйста, разместите [минимальный тестовый пример] (http://sscce.org). –

+0

Что произойдет, если вы закомментируете следующее: ArrayR = (bool *) Array; – tier1

+0

Tagged C++ - Почему 'printf' и т. Д.? Также избегайте указателей «void», поскольку вы теряете безопасность типа. –

ответ

0

Вы забыли \n последние printf, поэтому он добавляет следующий номер, который вы выводите. Сам указатель в порядке.

+0

Большое спасибо! Извините за раздражение .. – ntvy95

+1

@ ntvy95, не раздражая вообще. Легко пропустить самые простые вещи. –

+0

Также легко посмотреть на свою программу и заметить чрезвычайно очевидную ... программа явно печатает эти числа; они должны были появляться на выходе * где-то *. –