- Κώδικας: Επιλογή όλων
*y=temp;
Το
- Κώδικας: Επιλογή όλων
if (!x || !y)
τι εξετάζει? αν υπάρχουν τα x & y ?
Συντονιστής: konnn
*y=temp; if (!x || !y) 
Star_Light έγραψε:σου ξέφυγε ενας αστερίσκος στο y.

migf1 έγραψε:
Το πήρα χαμπάρι έγκαιρα και το διόρθωσα, αλλά εσύ ακόμα πιο έγκαιρα

migf1 έγραψε:
Ναι, μιας και η συνάρτηση δέχεται δείκτες, αυτός ο έλεγχος προστατεύει από την περίπτωση που κάποιος από αυτούς ή και οι 2 περαστούν με τιμή NULL... έστω και κατά λάθος.
Χωρίς αυτόν τον έλεγχο, αν περαστεί στη συνάρτηση οποιοδήποτε από τα 2 ορίσματά της με τιμή NULL θα παραχθεί seg-fault.
ΥΓ. Κάνε το swap των πινάκων... είναι καλή άσκηση.
1 3 4 5 3 1 5 4 

migf1 έγραψε:Βάλε NULL αντί για x ή για y όταν καλείς την swap... π.χ. int_swap( NULL, NULL); ... χωρίς το sanity check στην καλύτερη θα φας seg-fault, στη χειρότερη θα σου χακέψουν το πρόγραμμα.
Με το swap πινάκων εννοώ αν π.χ. έχεις 2 πίνακες arr1 και arr2, μετά το swap ο arr1 να έχει πάρει τα στοιχεία του arr2, και ο arr2 του arr1.


migf1 έγραψε:Και μένα με βλέπω να σταματάω για σήμερα, τα 'παιξα ( η τεκμηρίωση είναι πιο δύσκολη από τον κώδικα). Κι αύριο μέρα είναι

Star_Light έγραψε:migf1 έγραψε:Oh yes!!!!!!!!!!!!!!!!!!
Άξιος !!!!!!!!!!!!!!!
Θα μπορούσε για παράδειγμα το u να είναι ένας πίνακας ακεραίων, το l να είναι το μήκος του πίνακα (πλήθος στοιχείων δηλαδή), και η g() μια συνάρτηση που να εφαρμόζει κάτι που θα της έχουμε πει μέσα της, στο κάθε στοιχείο του πίνακα
- Κώδικας: Επιλογή όλων
//----------------------------------------------------------------------
#include<stdio.h>
void single_p(int *p2);
void double_p(int **p);
int main()
{
int **p , a=1 ;
int *p2;
p2=&a;
p=&p2;
printf ("%d\n", **p); // before change
printf("%p", p2);
puts("\n");
printf("%p", *p); // same adress with p2
printf("\n%p", &a);
puts("\n");
**p=1;
printf("After change in main : %d " , **p);
puts("\n");
single_p(p2); // call by reference simulation with one pointer
double_p(p); // call by reference simulation with double pointer
return 0;
}//---------------------------------------------------------------------
void single_p(int *p3)
{
*p3= 2;
printf("After change in single_p function : %d " , *p3);
return ;
}
//----------------------------------------------------------------------
void double_p(int **p)
{
**p=3;
printf("After change in double_p function : %d ", **p);
return ;
}
//----------------------------------------------------------------------
Αυτο μπορεις να μου πεις πως καταφερε και ετρεξε τελικα?![]()
![]()
νομιζω ο τριτος δεικτης δεν χρειαζεται απλα τον εβαλα στα γρηγορα επειδη μου πετουσε σφαλματα
χωρις να καλω την συναρτηση με τον p3 αλλα με τον p2 μου τρεχει... αλλο παλι και τουτο.


#include<stdio.h>
int main()
{
int **p2 , a=2;
int *p;
int *p3;
p=&a;
p2=&p;
printf("%d", *p);
printf("\t%d", **p2);
printf("\n%p", p); //address of a
printf("\n%p", &a); // address of a
printf("\n%p", &p); // address of p pointer
p3=p; // Indicating to the same variable
printf("\n %d", *p3); // print a = 2
return 0;
}
