2014-09-06 5 views
-2

Je ne fais que C depuis quelques semaines donc je suis assez nouveau pour ça.* Pointeur = - * Pointeur?

J'ai vu des choses comme

* (variable-name) = -* (variable-name) 

dans les notes de cours, mais que ferait-il exactement? Est-ce que cela annulerait simplement la valeur indiquée?

+5

Oui, il le ferait. (Donc, ce n'est pas tout à fait 'pointer = -pointer', mais plutôt' pointed_object = -pointed_object'.) –

+0

Je pensais que cela aurait été quelque chose de simple, et noté. Merci pour votre réponse rapide! –

+0

Remarque '* ptr * = -1;' est plus court. – wildplasser

Répondre

2

Oui. Lorsque vous ajoutez l'étoile, cela signifie qu'elle pointe vers la valeur. Il est essentiellement dit: à la valeur à l'adresse (nom-variable), devient -1 * la valeur de (nom-variable).

Si vous débutez en C, vous pouvez trouver plus facile d'utiliser & au lieu de pointeurs. & sont essentiellement le contraire de *. & ne pointe pas, il donne l'adresse d'une variable (ce que je trouve être un concept plus simple). Ce qui suit est un exemple qui devrait démontrer l'utilisation de * et &.

#include <stdio.h> 

int main(void) 
{ 
    int blah = 6; 
    int *num = &blah; 
    (*num) = -(*num); 
    printf("%d\n", num); //Displays num 
} 
+0

Ce n'est pas C, mon ami. – Igor

+0

J'utilise C++, ce qui est assez similaire, mais cela démontre le point. –

+0

Non, ils sont deux langues différentes. – Igor

0

Oui, il annule la valeur pointée vers. Nous ne pouvons pas écrire d'opérations sur les adresses, donc les opérations sont effectuées sur des pointeurs différés. Ici, *d = -*c signifie:

*d = (-1) * (*c) 

Exemple de code:

#include <stdio.h> 
#include <stdlib.h> 
int main(void) { 
    int *c; 
    int *d; 
    d = (int *)malloc(sizeof(int)); 
    c = (int *)malloc(sizeof(int)); 
    *c = 9; 
    *d = -*c; 
    printf("%d", *d); 
    free(c); 
    free(d); 
    return 0; 
} 
+0

S'il vous plaît ajouter des espaces. (Note: avant K & R2 '* d = - * c;' avait une signification différente) – wildplasser

+0

@ wildplasser: si vous pensez aux opérateurs d'assignation à l'ancienne '= -' au lieu de' - = ', alors même K & R 1 utilisé les nouvelles versions. Voir [Que signifie '= +' dans C?] (Http: // stackoverflow.com/questions/7573978/what-does-mean-in-c/7578156 # 7578156) –

+0

Vous dites _Nous ne pouvons pas écrire des opérations sur les adresses_, mais ce n'est pas tout à fait exact. Vous pouvez ajouter ou soustraire un entier d'une adresse, ou prendre la différence de deux adresses (à deux objets dans le même tableau), mais vous ne pouvez pas multiplier ou diviser des adresses, ni les annuler. –