2017-02-02 2 views
1

Ich habe ein zufälliges Array in der Hauptfunktion erzeugt, wie kann ich es richtig ausdrucken mit einer separaten Funktion und innerhalb der Funktion drucken Sie den Wert und Speicherort jedes Elements dieses Arrays mit Zeigern. Hier ist mein Code so weit:C: Drucken Sie den Wert und den Speicherort jedes Elements eines Arrays mithilfe von Zeigern aus?

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

void printArray(int *pointertoArray, int *Size); 

int main (void) 
{ 
srand(time(NULL)); 
int array[10]; 
int *pointer = NULL; 
for(int i = 0; i < size; i++) 
{ 
    array[i] = rand(); 
    *pointer = array[i]; 
    printArray(*pointer,size); 
} 
} 
void printArray(int *pointerToArray, int *size) 
{ 
    int i = 0; 
    do 
    { 
     printf("\nValue %d = %p ",i,*pointerToArray); 
     i++; 
    } 
    while(i < size); 
} 

Hier ist, was ich zu erreichen versuchen:

value 1 = 0x7fff0815c0e0 
    ..... 
    value 10 = 0x7fff0815c0ec 

Antwort

3
  • int *sizeint size sein sollte. Sie übergeben keinen Zeiger und Sie benötigen keinen Zeiger.
  • Eigentlich wäre size_t size geeigneter.
  • Der Anruf an printArray sollte sich nach der Schleife befinden. Sie möchten das Array nur einmal ausdrucken.
  • printArray(*pointer, size); sollte printArray(array, size); sein.
  • pointerToArray sollte array oder pointerToInts benannt werden.
  • Der Wert des Elements ist pointerToArray[i], nicht i.
  • Die Adresse des Elements lautet pointerToArray+i, nicht *pointerToArray.
  • Die Schleife in printArray sollte Top-getestet werden. (Kein Grund dafür, dass es unten getestet wurde, also gehe auf Nummer Sicher.)
  • main wird erklärt, um eine int zurückzugeben, aber tut es nicht.

Wir bekommen,

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

void printArray(int *array, size_t size); 

int main() { 
    srand(time(NULL)); 
    int array[10]; 
    for (int i = 0; i < size; ++i) { 
     array[i] = rand() % 1000; 
    } 

    printArray(array, sizeof(array)/sizeof(array[0])); 
    return 0; 
} 

void printArray(int *array, size_t size) { 
    for (int i = 0; i < size; ++i) { 
     printf("Value @ %p = %d\n", array+i, array[i]); 
    } 
} 

Alternative:

void printArray(int *pointerToInt, size_t size) { 
    for (; size--; ++pointerToInt) { 
     printf("Value @ %p = %d\n", pointerToInt, *pointerToInt); 
    } 
} 
Verwandte Themen