0

В методе печати ниже, как я могу прочитать содержимое массива после вызова метода Put?Как разыменовать содержимое указателя пустоты в заданных местах

//put some "pointers" in an array 
    Put(void* array) 
    { 
      void* ptr = array;    //get starting address of array 

      int k; 
      for(k=1; k <= 10; k++) 
      {   
       //put data in array 
       ptr = Get_DataPointer(); //sample return data: 0x6703fff00000 (64-bit hex)  
       ptr += k;     //increment address for next iteration 
      } 
    } 

//print the contents of the array 
Print(void* array) 
{ 
     for(k=0; k < 10; k++) 
     { 
      long dataPointer = ((long*)(array+ k)); 
      printf("Pointer %i, Content=%l\n", k, dataPointer); 
     } 
} 

Я получаю либо "0" или "&" в моем выходе.

ответ

0

Вы должны изменить приведенный выше код

long dataPointer = ((long*)(array+ k)); 
printf("Pointer %i, Content=%l\n", k, dataPointer); 

в

long *dataPointer = (long*)(array+ k); 
printf("Pointer %i, Content=%l\n", k, *dataPointer); 

Это типаж (массив + K) для длинной указкой (длинный *). И * dataPointer будет разыменовывать длинный указатель для печати содержимого.

+0

привет @sray, я не raelly работать. такой же результат – nikk

+0

Что делает функция Get_DataPointer()? Можете ли вы опубликовать этот код? В строке ptr = Get_DataPointer() кажется, что вы меняете ptr на точку в другом месте? Это не будет обновлять массив. Просто переходя через вашу функцию Print(), кажется, что массив хранит longs, верно? – sray

1

он должен выглядеть как

Put(void* array) 
{ 
    long *ptr = (long *)array; 
    int k; 

    for(k=1; k <= 10; k++) 
    { 
     *ptr = Get_DataPointer(); /* you need to dereference ptr to store value */ 
     ptr += 1; /* increment by one to get to the next address */ 
    } 
} 

Print(void* array) 
{ 
    long *ptr = (long *)array; 
    int k; 

    for(k=0; k < 10; k++) 
    { 
     long dataPointer = *(ptr + k); /* dereference to read the value */ 
     printf("Pointer %i, Content=%ld\n", k, dataPointer); 
    } 
}