2010-09-28 8 views
0

On suppose que,Quelle est la différence entre sizeof (int) et sizeof (int *)? Est-ce que cette instruction est int * numbers [] = {....} correct?

int numbers [20]; 
int * p; 

Je pense que cela est énoncé est valide

p = numbers; 

Mais ce n'est pas

numbers = p; 

Parce que numbers est un tableau, fonctionne comme un pointeur constant, et nous Impossible d'attribuer des valeurs aux constantes. Donc, si nous passons par là, nous ne pouvons pas utiliser *numbers lors de l'initialisation du tableau?

+1

Je ne comprends pas "utiliser * numéros lors de l'initialisation de la matrice". –

+0

http://www.catb.org/esr/faqs/smart-questions.html – sellibitze

+0

Le titre de la question ne correspond pas au corps de la question. Essayez d'être plus précis dans le futur, afin qu'il soit plus facile de répondre et, pour d'autres personnes qui partagent vos mêmes doutes, de trouver une solution. – Francesco

Répondre

3

numéros d'int [20]; int * p;

Je pense que cela déclaration est valable

p = nombres;

Oui

Mais ce n'est pas

chiffres = p;

Parce que les nombres sont un tableau, fonctionne comme un pointeur constant, et nous ne pouvons pas affecter des valeurs aux constantes.

numbers n'est pas un pointeur constant, il est un lvalue non modifiable, vous ne pouvez donc pas attribuer.

sizeof(int) renvoie la taille d'un nombre entier sur un mode particulier de réalisation

sizeof(int*) renvoie la taille d'un pointeur vers un entier.

type de retour de sizeof() est size_t (unsigned)

1

sizeof(int) renvoie le nombre d'octets utilisés pour stocker un int

sizeof(int*) renvoie le nombre d'octets utilisés pour stocker un pointeur

Pour déclarer initialiser un tableau constant de ints vous pouvez utiliser la syntaxe suivante:

int numbers[] = { 0, 1, 2, 3 }; 
1

sizeof(int) est la taille du type de données, sizeof(int*) est la taille d'un pointeur sur le type de données.

vous ne pouvez pas affecter p de chiffres, parce que le nombre est déclarée comme une pile de longueur fixe sur la base matrice int, son pas un pointeur d'int (mais il peut être converti en une)

-1

En termes simples

int numbers [20]; est un tableau d'entiers

int * p; est pointeur vers un entier; p stocke l'adresse vers laquelle il pointe

numbers = p; n'est pas possible; les deux sont de type différent un est int et l'autre est int *

Cependant numbers[0] = *p; est possible ; fourni p points à une adresse valide

+0

Je pense que vous voulez dire 'numéros [0] = * p' – Necrolis

+0

@Necrolis Mon mauvais, merci de souligner – Alam

+0

et nombres n'est pas un int c'est un tableau de 20 ints. – kriss

Questions connexes