2009-06-14 9 views
3

Je sais que vous pouvez déclarer un tableau en C comme ceci:c tableaux

int nums[5] = {0,1,2,3,4}; 

Cependant, pouvez-vous faire?

int nums[5]; 
// more code.... 
nums = { 0,2,5,1,2}; 

En d'autres termes, puis-je initialiser le tableau en utilisant la notation de support à tout autre moment que juste la déclaration? Merci pour votre temps, Sam

Répondre

1

C'est tout simplement pas possible

1

réponse simple: non.

L'initialisation d'un tableau C n'est possible qu'au moment de sa déclaration.

3

La norme indique qu'il n'est pas possible d'affecter simultanément tous les éléments d'un tableau à l'aide d'une expression d'affectation. Vous ne pouvez le faire que pendant la déclaration.

Mais vous pouvez réaliser ce que vous essayez de faire en copiant en utilisant des fonctions standard.

+0

Vous êtes super! Tu réponds si vite! Tu me fais totalement sentir mieux. Ça me rendait fou. Merci. ;) –

1

Non. La déclaration dans votre exemple ...

int nums[5] = {0,1,2,3,4}; 

... est appelée initialiseur. Les initialiseurs font partie de la déclaration de données qui spécifie les valeurs initiales de vos éléments de tableau.

Si vous créez le tableau sans l'initialiseur, vous n'avez pas de chance. Vous devez assigner des valeurs aux éléments du tableau à l'ancienne.

Profitez,

Robert C. Cartaino

17

Il est impossible en C89 (ce que les compilateurs les plus C cible). C99 est pris en charge par quelques-uns et a littéraux composés:

int nums[5]; 
memcpy(nums, (int[5]){1, 2, 3, 4, 5}, 5 * sizeof(int)); 

Vous pouvez cependant pas affecter à un tableau. Vous ne pouvez copier que dans sa mémoire. Vous auriez besoin d'un autre tableau que vous copiez dans C89

int nums[5]; 
int vals[] = { 1, 2, 3, 4, 5 }; 
memcpy(nums, vals, sizeof vals); 

Notez que l'opérateur sizeof renvoie la taille de son opérande en octets.

+0

Wow, cool, je ne le savais pas. :) Je ne pense pas avoir jamais vu ça en vrai code. Tous les compilateurs raisonnables supportent actuellement C99, ce qui pourrait être utile. – Zifre

+0

C'est vraiment cool – ZelluX

0

vous pouvez déclarer nums comme pointeur.

int * nums; 

alors vous pouvez attribuer un tableau à ce pointeur plus tard:

int tmp[5] = {0,1,2,3,4}; 

nums = tmp;