Différence entre size_t et unsigned int?

Je suis tellement confus à propos de size_t . J’ai cherché sur Internet et partout mentionné que size_t est un type non signé, donc, il peut représenter une valeur non négative.

Ma première question est que si c’est pour représenter des valeurs non négatives, pourquoi ne pas utiliser unsigned int au lieu de size_t ?

Ma deuxième question est: size_t et unsigned int interchangeables ou non? Si non alors pourquoi?

Et quelqu’un peut-il me donner un bon exemple de size_t et de son bref travail?

s’il est utilisé pour représenter une valeur non négative, alors pourquoi ne pas utiliser unsigned int au lieu de size_t

unsigned int n’est pas le seul type intégral non signé. size_t peut être l’un des caractères unsigned char , unsigned short , unsigned int , unsigned long ou unsigned long long , selon l’implémentation.

La deuxième question est que taille_t et int-interrés sont interchangeables ou non et sinon, pourquoi?

Ils ne sont pas interchangeables, pour la raison expliquée ci-dessus ^^ .

Et quelqu’un peut-il me donner un bon exemple de size_t et de son bref travail?

Je ne comprends pas tout à fait ce que vous entendez par “son bref travail”. Cela fonctionne comme n’importe quel autre type non signé (en particulier, comme le type auquel il a été appliqué). Vous êtes encouragé à utiliser size_t lorsque vous décrivez la taille d’un object. En particulier, l’opérateur sizeof et diverses fonctions de bibliothèque standard, telles que strlen() , renvoient size_t .

Bonus: voici un bon article (article supprimé, utilisez le snapshot de la machine ) à propos de size_t (et le type ptrdiff_t étroitement lié). C’est très bien pourquoi vous devriez l’utiliser.

Il existe 5 types d’entiers non signés standard dans C:

  • unsigned char
  • unsigned short
  • unsigned int
  • unsigned long
  • unsigned long long

avec des exigences différentes pour leurs tailles et leurs plages (brièvement, la plage de chaque type est un sous-ensemble de la plage du type suivant, mais certaines peuvent avoir la même plage).

size_t est un typedef (c’est-à-dire un alias) pour certains types non signés (probablement l’un des éléments ci-dessus, mais probablement un type d’entier non signé étendu , bien que cela soit peu probable). C’est le type généré par l’opérateur sizeof .

Sur un système, il peut être judicieux d’utiliser unsigned int pour représenter des tailles; sur un autre, il serait peut-être plus logique d’utiliser un unsigned long unsigned long long ou un unsigned long long . ( size_t est peu probable que size_t soit unsigned char ou unsigned short , mais cela est autorisé).

Le but de size_t est de libérer le programmeur de la question de savoir lequel des types prédéfinis est utilisé pour représenter les tailles.

Le code qui suppose que sizeof produit un unsigned int ne serait pas portable. Le code qui suppose qu’il donne une size_t plus de chances d’être portable.

size_t a une ressortingction spécifique.

Citant de http://www.cplusplus.com/reference/cssortingng/size_t/ :

Alias ​​d’un des types entiers fondamentaux non signés.

C’est un type capable de représenter la taille de n’importe quel object en octets : size_t est le type renvoyé par l’opérateur sizeof et est largement utilisé dans la bibliothèque standard pour représenter les tailles et les décomptes.

Il n’est pas interchangeable avec unsigned int car la taille de int est spécifiée par le modèle de données. Par exemple, LLP64 utilise un int 32 bits et ILP64 utilise un int 64 bits.

size_t est utilisé pour stocker les tailles des objects de données et garantit la capacité de contenir la taille de tout object de données que l’implémentation C peut créer. Ce type de données peut être plus petit (en nombre de bits), plus grand ou exactement identique à unsigned int.

Le type size_t est un type d’entier non signé de base du langage C / C ++. C’est le type du résultat renvoyé par l’opérateur sizeof. La taille du type est choisie de manière à pouvoir stocker la taille maximale d’un tableau théoriquement possible de tout type. Sur un système 32 bits, taille_t prendra 32 bits, sur un 64 bits 64 bits. En d’autres termes, une variable de type size_t peut stocker un pointeur en toute sécurité. L’exception concerne les fonctions de classe, mais c’est un cas particulier. Bien que size_t puisse stocker un pointeur, il est préférable d’utiliser un autre type d’entier non signé uintptr_t (son nom reflète sa capacité). Les types size_t et uintptr_t sont synonymes. Le type size_t est généralement utilisé pour les compteurs de boucles, l’indexation de tableaux et l’arithmétique d’adresses. La valeur maximale possible du type size_t est la constante SIZE_MAX.

Outre les autres réponses, il documente également le code et indique aux gens que vous parlez de la taille des objects en mémoire.