2016-04-14 8 views
0

Ich wurde gebeten, eine Funktion zu schreiben, die den Inhalt eines Arrays nach dem x ten Element (wie in x und weiter, wie x ist ein Zeiger innerhalb der Array). Ich bin nicht erlaubt, [] für alles andere als Initialisierung zu verwenden, und nicht erlaubt, Variablen innerhalb der Funktion zu erstellen - ich darf nur verwenden, was die Funktion von der Haupt empfängt, die die Länge (int n), das Array (int* arr) und Element ist x (int* x).Verwendung von * nur * Zeigern, um den Inhalt eines Arrays zu drucken

Meine Frage ist, wie kann ich x und her im Array mit nur Zeigern ohne einen Index von einer Schleife drucken?

Hier ist, was ich schrieb:

void printAfterX(int* arr, int n, int* x) 
{ 
    if ((arr <= x) && (x < arr + n)) 
    { 
     while(x < (arr + n)) 
     { 
      printf("%8d", *(arr+x));  //I know you can't do this 
      x++; 
     } 
    } 
} 

Dazu:

7 8 4 3 6 1 2 

Edit:: Danke euch alle für die Hilfe

int arr[] = { 0,5,6,7,8,4,3,6,1,2 }; 
    int n=10; 
    int* x = (arr+3); 

    printAfterX(arr, n, x); 

Der Ausgang sein sollte! Funktioniert gut. :)

+0

ist 'n' die Gesamtlänge des Arrays oder die Anzahl der zu druckenden Zeichen? – atturri

+0

Wenn 'x' ein Zeiger auf einen Wert ist, können Sie' printf ("% 8d", * (arr + * x) '(dereferenz' x') verwenden –

+0

@atturri nein, ich drucke nur von arr [x] bis Das Ende des Arrays – fishy

Antwort

2
void printAfterX(int* arr, int n, int* x) 
{ 
    arr += n;    // make arr to point past the last element of the array 
    for(; x < arr; x++) // walk till the end of array 
     printf("%8d", *x); // print the current item 
} 

Beispiel https://ideone.com/Ea3ceT

+0

Vs Fehler erscheint: "Access violation reading location" – fishy

+0

@fishy Es wird nicht passieren, wenn Sie Fehler in Ihrer 'main()' Routine beheben. – CiaPan

+0

Ja, das habe ich behoben. Vielen Dank. – fishy

-1

Ändern der printf Linie dafür:

printf("%8d", *x); 
+0

Das macht VS Flash einen Fehler" ..Access Verletzung Leseort " – fishy

+2

Entfernen Sie das Sternchen von' x' in der Zeile, die Sie 'printAfterX' nennen. Ihre Anruferfunktion ist falsch. – atturri

+0

oh. Danke, ich denke es war ein ziemlich dummer Fehler. – fishy

0

Sie wollen dies:

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

void printAfterX(int* arr, int n, int* x) 
{ 
    while(x < (arr + n)) 
    { 
     printf("%d ", *x); 
     x++; 
    } 
} 

int main() 
{ 
    int arr[] = { 0,5,6,7,8,4,3,6,1,2 }; 
    int n = 10; 
    int *x = (arr+3); 

    printAfterX(arr, n, x); 
    return 0; 
} 
+0

nun, es gibt nichts zurück, warum sollte es int sein? Normalerweise ist es kein Problem, wenn ich meine Hausaufgaben mache? – fishy

+0

@fishy es funktioniert [hier] (http://ideone.com/etN6Zc). –

+0

@fishy Vielleicht ist es an der Zeit zu lernen, wie man den Visual Studio Debugger benutzt. –

Verwandte Themen