2010-04-23 21 views
17

Po prostu upewniam się, że rozumiem tę koncepcję poprawnie. Za pomocą operatora * tworzę nową zmienną, której przydzielono miejsce w pamięci. Aby nie niepotrzebnie duplikować zmiennych i ich wartości, operator & jest używany do przekazywania wartości metodom i takim, i faktycznie wskazuje na oryginalną instancję zmiennej, w przeciwieństwie do tworzenia nowych kopii ... Czy to prawda? Jest to oczywiście płytkie zrozumienie, ale chcę się tylko upewnić, że nie pomieszam ich. Dzięki!Jaka jest różnica między operatorem * i operatorem w programie c?

+4

Czy na pewno nie jesteś coraz mylić z C++, który używa i jako operator odniesienia, jak również adres-of operator? –

+1

Możliwe dupe: http://stackoverflow.com/questions/2667420/ – sbi

+2

Jako operatory, '*' i '&' są odwrotne, jak '++' i '-', lub '+' i '-' lub '*' i '/'. – outis

Odpowiedz

38

Niezupełnie. Mylicie kod * występujący w nazwie typu (używanej do definiowania zmiennej) za pomocą operatora *.

int main() { 
    int i; // i is an int 
    int *p; // this is a * in a type-name. It means p is a pointer-to-int 
    p = &i; // use & operator to get a pointer to i, assign that to p. 
    *p = 3; // use * operator to "dereference" p, meaning 3 is assigned to i. 
} 
11

Do znalezienia adresu zmiennej używa się &. Więc jeśli masz:

int x = 42; 

i (na przykład) komputer przechowywane x w miejscu adresu 5, &x byłoby 5. Podobnie można sklep ten adres w zmiennej o nazwie wskaźnik:

int* pointer_to_x = &x; // pointer_to_x has value 5 

Gdy masz wskaźnik można dereference to za pomocą operatora * przekonwertować go z powrotem do typu, który wskazuje :

int y = *pointer_to_x; // y is assigned the value found at address "pointer_to_x" 
         // which is the address of x. x has value 42, so y will be 42. 
4

Po powiązaniu zmiennej z operatorem * ta zmienna zawiera adres pamięci.

Po sparowaniu z operatorem & zwraca adres, pod którym zmienna jest trzymana.

Jeśli miał

int x = 5; //5 is located in memory at, for example, 0xbffff804 
int *y = &x; //&x is the same thing as 0xbffff804, so y now points to that address 

zarówno x i *y przyniesie 5

Powiązane problemy