Latest web development tutorials

C Pointer

Apprendre C pointeur de la langue facile et amusant. Grâce à un pointeur, vous pouvez simplifier la mise en œuvre de certaines des tâches de programmation C, il y a certaines tâches, telles que l'allocation dynamique de mémoire, pas de pointeur est inapplicable. Donc, je veux devenir un bon programmeur C, les pointeurs d'apprentissage sont nécessaires.

Comme vous le savez, chaque variable a un emplacement de mémoire, chaque emplacement de mémoire définit l'adresse de l'opérateur-accès peut utiliser le trait d'union (&), qui représente une adresse en mémoire. Considérons les exemples suivants, qui définiront la sortie adresse de la variable:

#include <stdio.h>

int main ()
{
   int  var1;
   char var2[10];

   printf("var1 变量的地址: %x\n", &var1  );
   printf("var2 变量的地址: %x\n", &var2  );

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

var1 变量的地址: bff5a400
var2 变量的地址: bff5a3f6

A titre d'exemple ci-dessus, nous comprenons ce qu'est une adresse de mémoire et comment y accéder. Regardons ce qui est un pointeur.

Qu'est-ce qu'un pointeur?

Un pointeur est une variable dont la valeur est l'adresse d' une autre variable, à savoir, l'adresse directe de l'emplacement de mémoire.Avant Comme d'autres variables ou constantes, vous devez utiliser une adresse de mémoire de pointeur d'autres variables, il est déclaré. La forme générale d'une déclaration de variable pointeur est:

type *var-name;

Ici, le type est un pointeur vers le type de base, il doit être un typede données Cvalide,var-name est le nom de la variable de pointeur. Est utilisé pour déclarer un pointeur astérisque * multiplication utiliser l'astérisque est le même. Cependant, dans cette déclaration, l'astérisque est utilisé pour spécifier une variable est un pointeur. Ce qui suit est une déclaration de pointeur valide:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch     /* 一个字符型的指针 */

Tous les pointeurs de type réel de la valeur de données, que ce soit un nombre entier, float, string, ou d'autres types de données sont les mêmes, est un nombre hexadécimal représente une adresse mémoire longue. La seule différence entre les différents types de pointeur de données, le pointeur est un des types de données variables ou constants.

Comment utiliser le pointeur?

Va utiliser fréquemment le pointeur lorsque les actions suivantes: définir une variable de pointeur, l'adresse de variable attribué au pointeur, accéder à la valeur de la variable de pointeur disponibles adresses. Cela se fait à l'aide de l'opérateur unaire* pour renvoyer la valeur de la variable se trouve à l'adresse de l' opérande spécifié.Les exemples suivants se rapportent à ces actions:

#include <stdio.h>

int main ()
{
   int  var = 20;   /* 实际变量的声明 */
   int  *ip;        /* 指针变量的声明 */

   ip = &var;  /* 在指针变量中存储 var 的地址 */

   printf("Address of var variable: %x\n", &var  );

   /* 在指针变量中存储的地址 */
   printf("Address stored in ip variable: %x\n", ip );

   /* 使用指针访问值 */
   printf("Value of *ip variable: %d\n", *ip );

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

Le pointeur NULL C

Au moment de la déclaration des variables, sinon l'adresse exacte peut être affectée, attribuer une valeur NULL pour la variable de pointeur est une bonne pratique de programmation. Fu NULL valeur de pointeur est appelé un pointeurNULL.

Un pointeur NULL est défini dans la bibliothèque standard zéro constantes. Considérez le programme suivant:

#include <stdio.h>

int main ()
{
   int  *ptr = NULL;

   printf("ptr 的值是 %x\n", ptr  );
 
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

ptr 的值是 0

Sur la plupart des systèmes d'exploitation, le programme ne permet pas l'accès à l'adresse de mémoire 0, parce que la mémoire est réservée au système d'exploitation. Toutefois, l'adresse mémoire 0 a une signification particulière, il indique que le pointeur ne pointe pas vers un emplacement de mémoire accessible. Mais, selon la convention, si le pointeur contient une valeur null (valeur zéro), on suppose qu'il ne pointe pas vers quoi que ce soit.

Pour vérifier un pointeur NULL, vous pouvez utiliser l'instruction if, comme suit:

if(ptr)     /* 如果 p 非空,则完成 */
if(!ptr)    /* 如果 p 为空,则完成 */

C pointeur détaillée

En C, il y a beaucoup de pointeurs concepts liés qui sont très simples, mais très important. Ci-dessous sont quelques concepts importants associés au pointeur programmeurs C doivent être claires:

概念描述
指针的算术运算 可以对指针进行四种算术运算:++、--、+、-
指针数组 可以定义用来存储指针的数组。
指向指针的指针 C 允许指向指针的指针。
传递指针给函数 通过引用或地址传递参数,使传递的参数在调用函数中被改变。
从函数返回指针 C 允许函数返回指针到局部变量、静态变量和动态内存分配。