stamatiou έγραψε:1.Μήπως ξέρει κανείς τι ακριβώς είναι οι static variables και functions;
Edit: 2.Επίσης, για να περάσουμε μια μεταβλητή σε μια συνάρτηση by reference πρέπει να περάσουμε ένα δείκτη της, για να περάσουμε ένα δείκτη by reference πρέπει να περάσουμε ένα δείκτη στον δείκτη;
1.
functions ειναι οι συναρτησεις. Τα static δεν τα θυμαμαι απεξω.... αλλα θα σου δωσω ενα παραδειγμα σε C εστω ο πιο κατω κωδικας
- Κώδικας: Επιλογή όλων
#include<stdio.h>
int add_two(int x , int y)
{
static int counter=1;
printf("H klhsh tis sunarthshs: %d \n", counter++);
return (x+y);
}
main()
{
int i,j;
int x[2];
for(i=0,j=5; i<5; i++, j--)
printf("i prosthesi tou %d kai tou %d einai %d. \n\n",i,j,add_two(i,j));
printf("%d",x[2]);
return 0;
}
Aν την μεταβλητη counter δεν την δηλωνα σαν static θα εμενε συνεχως 1.
Ειναι ενας τροπος να μην διαγραφει η συναρτηση τα δεδομενα της μολις σταματαει η κληση της.
2. Περνας εναν δεικτη μεσα σε μια συναρτηση σαν ορισμα για να της δωσεις να καταλαβει
πως η δουλεια της θα ειναι πανω στην
αυθεντικη θεση μνημης και οχι σε ενα
αντιγραφο αυτης.
Για να πετυχει η σκεψη σου θες ομως 3 πραγματα ταυτοχρονα.
-> 1. Να περασεις σαν παραμετρο της συναρτησης τον δεικτη
ΚΑΙ
-> 2. Να καλεσεις την συναρτηση μεσα στην main() με παραμετρο την διευθυνση του δεικτη
ΚΑΙ
-> 3. Μεσα στην συναρτηση (τοπικα) θα παιζεις με τον αστερισκο.
Ενα παραδειγμα ειναι το εξης
- Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
void function( int *x)
{
(*x)++;
return;
}
int main()
{
int x=1;
printf("O x apo tin main(): %d \n",x);
function(&x);
printf("O x apo tin function me call by reference: %d \n",x);
return 0;
}
Τωρα αν θες να μπλεχτεις παραπανω με τους δεικτες που αν παιξεις με δομες και λιστες και ολα αυτα τα ωραια
(να ναι καλα ο migf1) θα έχεις ηδη εναν δεικτη μεσα στην main() εκει πλεον αν θες να τον περασεις by reference σε μια συναρτηση
επειδη ειναι ΗΔΗ δεικτης... θα περασεις διπλο δεικτη... οπως τα παραπανω δηλαδη απλα με ** αστερακια...
η διαφορα του παραδειγματος που εδωσα με αυτο που ειπα ακριβως εδω απο πανω ειναι οτι στο μεν ενα δεν εχεις δεικτη μεσα στην main εχεις απλη μεταβλητη. Για αυτο ενα μονο αστερακι στην συναρτηση.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]