Peut-il être utilisé dans les tableaux en C?
Dans le langage C, NULL ne peut pas être utilisé directement dans les tableaux ordinaires, mais peut être habilement utilisé dans les tableaux de pointeurs: Attribuez des éléments nuls aux éléments du tableau de pointeur pour indiquer l'état fin ou non valide du tableau; Lorsque vous traversez les tableaux de pointeurs, vérifiez si l'élément est nul pour arrêter la boucle; Lors de l'allocation des tableaux de pointeurs, allouez plus d'espace pour stocker NULL pour éviter l'accès hors limites; Lorsque vous utilisez NULL comme drapeau final du tableau, faites attention à l'allocation et à la libération de la mémoire pour éviter les fuites de mémoire.
Peut-il être utilisé dans les tableaux en C? La réponse est: elle ne peut pas être utilisée directement, mais elle peut être utilisée intelligemment.
Cette question semble simple, mais elle a en fait un secret. De nombreux débutants prendront pour acquis que puisque NULL
représente un pointeur nul et que le nom du tableau est essentiellement un pointeur, ne peut NULL
être affecté à un tableau? faux! Cette idée ignore les différences subtiles entre les tableaux et les pointeurs en C.
Prenons d'abord les bases. En C, les noms de tableau dans la plupart des cas deviennent des pointeurs vers leur premier élément. Cependant, le nom du tableau lui-même n'est pas une variable de pointeur, il n'a pas d'espace de stockage indépendant, et vous ne pouvez pas attribuer des noms de tableau, par exemple array_name = NULL;
est illégal. NULL
est une macro, généralement définie comme (void *)0
, qui représente un pointeur nul, pointant vers l'adresse mémoire 0. Essayer d'attribuer NULL
au nom du tableau équivaut à essayer de modifier l'adresse de début du tableau en mémoire, ce qui n'est pas autorisé. Le compilateur rapportera directement une erreur.
Alors, NULL
est-il complètement inutile dans les opérations liées à la table? Pas le cas. Nous pouvons utiliser NULL
pour représenter l'état "fin" ou "non valide" d'un tableau. Cela se produit généralement dans des scénarios où les tableaux sont alloués dynamiquement ou des tableaux de pointeurs sont traités.
Imaginez que vous allouez dynamiquement un éventail de pointeurs pour stocker quelques cordes. Si certaines chaînes ne sont pas affectées ou que vous souhaitez représenter la fin du tableau, NULL
sera utile.
Jetons un coup d'œil à un exemple:
<code class="c">#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char **string_array; // 指向字符串的指针数组int num_strings = 5; string_array = (char **)malloc(sizeof(char *) * (num_strings 1)); // 多分配一个空间用于NULL if (string_array == NULL) { fprintf(stderr, "内存分配失败!\n"); return 1; } // 初始化部分字符串string_array[0] = strdup("Hello"); string_array[1] = strdup("World"); string_array[2] = strdup("!"); string_array[3] = NULL; // 用NULL表示数组结束// 遍历并打印字符串int i = 0; while (string_array[i] != NULL) { printf("%s ", string_array[i]); free(string_array[i]); // 释放动态分配的内存i ; } printf("\n"); string_array[4] = strdup("This is a test"); // 使用剩余空间//再次遍历i = 0; while (string_array[i] != NULL) { printf("%s ", string_array[i]); free(string_array[i]); i ; } printf("\n"); free(string_array); // 释放指针数组本身的内存return 0; }</string.h></stdlib.h></stdio.h></code>
Dans cet exemple, string_array
est un tableau de pointeurs vers une chaîne. Nous utilisons NULL
comme valeur sentinelle pour marquer la fin du tableau. Lorsque vous itérant dans le tableau, nous vérifions si chaque élément est NULL
pour arrêter la boucle. Il s'agit d'une astuce courante pour éviter les tracas de nécessiter une maintenance supplémentaire des longueurs de réseau. Notez que nous allons ici un espace d'élément de plus que num_strings
, qui est spécifiquement utilisé pour stocker NULL
. Oublié cette étape est une erreur courante, ce qui peut entraîner l'accès au programme à la mémoire au-delà des limites et à provoquer des accidents.
Il convient de noter que cette méthode ne s'applique qu'aux tableaux de pointeurs, et non aux tableaux ordinaires. Pour les tableaux ordinaires, NULL
est totalement inutile. De plus, l'utilisation de NULL
comme indicateur d'extrémité du tableau nécessite un traitement minutieux de l'allocation et de la libération de la mémoire, sinon il est facile de provoquer des fuites de mémoire. Assurez-vous de libérer la mémoire allouée dynamiquement dans le temps après l'avoir utilisée et développer de bonnes habitudes de gestion de la mémoire. C'est le seul moyen d'éviter les problèmes de mémoire du langage C.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

L'utilisation de la bibliothèque Chrono en C peut vous permettre de contrôler plus précisément les intervalles de temps et de temps. Explorons le charme de cette bibliothèque. La bibliothèque Chrono de C fait partie de la bibliothèque standard, qui fournit une façon moderne de gérer les intervalles de temps et de temps. Pour les programmeurs qui ont souffert de temps et ctime, Chrono est sans aucun doute une aubaine. Il améliore non seulement la lisibilité et la maintenabilité du code, mais offre également une précision et une flexibilité plus élevées. Commençons par les bases. La bibliothèque Chrono comprend principalement les composants clés suivants: std :: chrono :: system_clock: représente l'horloge système, utilisée pour obtenir l'heure actuelle. std :: chron

Memebox 2.0 redéfinit la gestion des actifs cryptographiques grâce à une architecture innovante et à des percées de performance. 1) Il résout trois principaux points de douleur: les silos d'actifs, la désintégration du revenu et le paradoxe de la sécurité et de la commodité. 2) Grâce à des pôles d'actifs intelligents, à la gestion des risques dynamiques et aux moteurs d'amélioration du rendement, la vitesse de transfert croisée, le taux de rendement moyen et la vitesse de réponse aux incidents de sécurité sont améliorés. 3) Fournir aux utilisateurs la visualisation des actifs, l'automatisation des politiques et l'intégration de la gouvernance, réalisant la reconstruction de la valeur utilisateur. 4) Grâce à la collaboration écologique et à l'innovation de la conformité, l'efficacité globale de la plate-forme a été améliorée. 5) À l'avenir, les pools d'assurance-contrat intelligents, l'intégration du marché des prévisions et l'allocation d'actifs axés sur l'IA seront lancés pour continuer à diriger le développement de l'industrie.

Créé par Ripple, Ripple est utilisé pour les paiements transfrontaliers, qui sont rapides et à faible coût et adaptés aux petits paiements de transactions. Après avoir enregistré un portefeuille et un échange, l'achat et le stockage peuvent être effectués.

Les dix principales plates-formes de trading de crypto-monnaie au monde comprennent Binance, Okx, Gate.io, Coinbase, Kraken, Huobi Global, BitFinex, Bittrex, Kucoin et Poloniex, qui fournissent toutes une variété de méthodes de trading et de puissantes mesures de sécurité.

Plate-forme de trading de devises numériques fiables recommandées: 1. Okx, 2. Binance, 3. Coinbase, 4. Kraken, 5. Huobi, 6. Kucoin, 7. Bitfinex, 8. Gemini, 9. Bitstamp, 10. Poloniex, ces plates-formes sont connu

La mesure des performances du thread en C peut utiliser les outils de synchronisation, les outils d'analyse des performances et les minuteries personnalisées dans la bibliothèque standard. 1. Utilisez la bibliothèque pour mesurer le temps d'exécution. 2. Utilisez le GPROF pour l'analyse des performances. Les étapes incluent l'ajout de l'option -pg pendant la compilation, l'exécution du programme pour générer un fichier gmon.out et la génération d'un rapport de performances. 3. Utilisez le module Callgrind de Valgrind pour effectuer une analyse plus détaillée. Les étapes incluent l'exécution du programme pour générer le fichier callgrind.out et la visualisation des résultats à l'aide de Kcachegrind. 4. Les minuteries personnalisées peuvent mesurer de manière flexible le temps d'exécution d'un segment de code spécifique. Ces méthodes aident à bien comprendre les performances du thread et à optimiser le code.

La compatibilité ABI en C se réfère si le code binaire généré par différents compilateurs ou versions peut être compatible sans recompilation. 1. Fonction Calling Conventions, 2. Modification du nom, 3. Disposition de la table de fonction virtuelle, 4. Structure et mise en page de classe sont les principaux aspects impliqués.

Les dix premiers échanges de devises numériques tels que Binance, OKX, Gate.io ont amélioré leurs systèmes, des transactions diversifiées efficaces et des mesures de sécurité strictes.
