Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ρε παιδια επειδη θα με τρελανουν σε μια άλλη συζητηση ....

 

Έστω

 
int arr2d[2][2];
 

Τοτε το arr2d δεν ειναι δείκτης στο πρωτο στοιχειο της γραμμής i? Kαι ο King το λεει ξεκαθαρα στο βιβλιο του στην σελ.268 εκτος και αν εχω τρελαθει εγώ.

 
#include<stdio.h>
#define nrows 2
#define COLS 3

int main(void)
{
    int arr2d[nrows][COLS]={ {1 , 2 , 3} , { 4 , 5 , 6} };
    
    int *p , sum=0;   
    
     for( p = arr2d[0] ; p < (arr2d[0] + nrows*COLS); p++)  
        sum+= *p;
        
    printf("%d" , sum);
    
    return 0;
}
 

Εδω δεν έχουν τον ίδιο τύπο ας πουμε οι p και arr2d[0]?

  • Moderators
Δημοσ.

Είναι δείκτης στο στοιχειο της πρώτης γραμμής. 

p++ θα σε πάει στην επόμενη γραμμή  (όχι στο επόμενο στοιχειο της πρώτης γραμμής). 

Εκτός και αν κάτι δε θυμάμαι σωστα :P

Ναι, screw that, σωστό είναι θα πάρει όλα τα στοιχεία. 

Δημοσ.

Είναι δείκτης στο στοιχειο της πρώτης γραμμής. 

p++ θα σε πάει στην επόμενη γραμμή  (όχι στο επόμενο στοιχειο της πρώτης γραμμής). 

Εκτός και αν κάτι δε θυμάμαι σωστα :P

Ναι, screw that, σωστό είναι θα πάρει όλα τα στοιχεία.

#include<stdio.h>

int main(void)
{
    int arr2d[2][3];

    int *p;

    p = arr2d[0];
    printf("p points to %p\n",(void *)p);
    p++;
    printf("p points to %p\n",(void *)p);

    return 0;
}
Έξοδος:
p points to 0xa40
p points to 0xa44
Για να δεις πόσο μακρυά σε πάει σκέψου τι είναι ο p. Δηλώνεται ως "int *" άρα είναι δείκτης σε ένα int οπότε μετακινείται κατά 1 int την φορά και όχι κατά μία ολόκληρη γραμμή. Όσον αφορά την ερώτηση του Star_Light μη δίνεις σημασία. Πρέπει να είναι η 19 φορά που ποστάρει τέτοιο κώδικα και ρωτάει για 2d πίνακες. Σε δουλειά να βρισκόμαστε.
  • Like 1
  • Moderators
Δημοσ.

Για να δεις πόσο μακρυά σε πάει σκέψου τι είναι ο p. Δηλώνεται ως "int *" άρα είναι δείκτης σε ένα int οπότε μετακινείται κατά 1 int την φορά και όχι κατά μία ολόκληρη γραμμή. 

 

Yep. Αυτό ήταν που με έκανε να κολλήσω και να αναθεωρήσω τελικά.

Είναι γενικά κώδικας που δε θα έγραφα (όπως τον έχει ο Star_Light). 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...