Le sixième jour de l'apprentissage informatique-mots-clés, pointeurs

Introduction à l'apprentissage informatique du sixième jour-mots-clés, pointeurs

Compilateur: Microsoft Visual Studio 2010

Enregistrez le blog d'apprentissage du langage C le sixième jour.

Un mot-clé commun

Insérez la description de l'image ici
Focus sur les mots-clés:
typedef : comme son nom l'indique, il s'agit d'une définition de type, qui doit être comprise comme un renommage de type.

int main()
{
    
     typedef unsigned int u_int;
   unsigned int num1 = 20;
 u_int num2 = 20;
return 0;
}

Parmi eux: unsigned int est défini comme u_int par typedef, et les deux significations sont exactement les mêmes.


static : Dans le langage C, static est utilisé pour modifier les variables et les fonctions
1, modifier les variables locales-variables locales statiques

void test()
{
    
    
int a = 1;
a++;
printf("a = %d\n",a);
}
int main()
{
    
     int i = 0;
while (i<5)
{
    
    
	test();
	i++;
}
return 0;
}

La sortie est la suivante:
Insérez la description de l'image ici
chaque fois que a est imprimé à partir de la fonction de test, il est détruit. Donc, à chaque fois, il commence la boucle avec 1.
Lorsque statique est utilisé,

void test()
{
    
    
static int a = 1;在这里使用 !! 是一个静态的局部变量
a++;
printf("a = %d\n",a);
}
int main()
{
    
     int i = 0;
while (i<5)
{
    
    
	test();
	i++;
}
return 0;
}

Le résultat est le suivant:
Insérez la description de l'image ici
chaque fois que a est imprimé à partir de la fonction de test, il n'est pas détruit, mais la valeur est enregistrée. Prolonge le cycle de vie des variables locales .

2. Modification des variables globales - changement de la portée des variables
Dans un autre fichier source, définissez static int, et utilisez extern dans un autre fichier source pour déclarer lorsqu'il est utilisé:
Insérez la description de l'image iciInsérez la description de l'image ici
une erreur s'est produite:

Insérez la description de l'image ici
Ceci peut être obtenu: les variables globales ne peuvent être utilisées qu'à l'intérieur du fichier source où elles se trouvent, et ne peuvent pas être utilisées en dehors du fichier source.

3. Fonction modifiée
Dans un autre fichier source, définissez la fonction statique int Add et utilisez extern dans un autre fichier source pour déclarer l'utilisation:
Insérez la description de l'image ici

Insérez la description de l'image ici

Une erreur s'est produite:
Insérez la description de l'image ici
la fonction de modification statique modifie l'attribut de lien de la fonction, de l'attribut de lien externe à l'attribut de lien interne.


** # définir définir des constantes et des macros **

#define Définir la constante d'identifiant
Par exemple:

#define MAX 10000
int main()
{
    
     int a = MAX;
return 0;
}

#define définit une macro avec des paramètres
Par exemple: #define ADD (x, y) ((x) + (y))
compare la taille de deux nombres dans une fonction


int MAX(int x , int y)
{
    
    
  if (x > y)
  return x;
  else
  return y;
  }
  int main ()
  {
    
    int a =20;
  int b =30;
  int z = MAX(a , b);
  printf("Max=%d\n",z);
  return 0;
}

Les résultats sont les suivants:
Insérez la description de l'image ici

Comparez la taille de deux nombres avec une macro

#define MAX(X,Y) (X>Y?X:Y)
 int main ()
  {
    
    int a =20;
  int b =30;
  int z = MAX(a , b); 会被替换成(a>b?a:b)
  printf("Max=%d\n",z);
  return 0;
  }

Deuxièmement, le pointeur

1. Prenez l'opérateur d'adresse.
"&"

int main()
	{
    
    int a = 10;
 printf("%p\n",&a);
 return 0;
}

Insérez la description de l'image ici
Il s'agit de l'adresse de a, en hexadécimal.
Puisque & a produit une adresse et une valeur, elle peut être stockée. C'est une variable de pointeur.

2. Les variables de pointeur
sont des variables utilisées pour stocker les adresses.
int * p: p est une variable, le type est int *

int main()
	{
    
    int a = 10;
int* p = &a;
 printf("%p\n",&a);
 printf("%p\n",p);
 return 0;
}

La valeur de sortie est la même.
Insérez la description de l'image ici

3. L'opérateur de déréférence
* p
déréférence p, trouve l'objet a pointé par p et le modifie.

int main()
	{
    
    int a = 10;
int* p = &a;
 printf("%p\n",&a);
 printf("%p\n",p);
 *p = 20;
 printf("%d\n",a);
 return 0;
}

Insérez la description de l'image ici
La valeur de a a été modifiée à 20.

``
La relation entre l'opérateur d'adresse, la variable de pointeur et l'opérateur de déréférencement:
Insérez la description de l'image ici
int a = 10; Le type int s'applique à l'espace pour stocker "10" dans la mémoire et est nommé a.
& a est l'opérateur d'adresse, qui peut extraire l'adresse d'un. 0x0012ff40.
Int * p = & a; Stocke l'adresse de a dans la variable p, où p est une variable de pointeur.
* p est a, ce qui équivaut à changer a = 10 en a = 20.
4. La taille de la variable de pointeur

int main()
	{
    
    int a = 10;
int* p = &a;
 printf("%d\n",sizeof(p));
 
 return 0;
}

Le résultat de sortie est 4.
Par conséquent, la taille de la variable de pointeur est de 4 octets sous le système d'exploitation 32 bits.
Définissez la plate-forme de langage C sous un système d'exploitation
Insérez la description de l'image ici
Insérez la description de l'image ici
64 bits : 64 bits.

La taille de la variable de pointeur est de 8 octets sous le système d'exploitation 64 bits.


Connaissance informatique / connaissance du code (fragmentée)

1. L'ordinateur stocke les données:
Insérez la description de l'image ici
plus la vitesse est élevée, plus la vitesse d'accès est rapide, plus la taille est petite et plus le coût est élevé.
Les données couramment utilisées sont classées et préchargées dans les registres, la mémoire cache et la mémoire en fonction de la fréquence d'utilisation.

Dirigez le registre des mots-clés:

int main()
{
    
     register int a = 10;/建议把a定义成寄存器变量,a是否真的放在了寄存器里,取决于编译器的判断。
return 0;
}

2. Les variables définies par int sont signées. signé int équivaut à int.
unsigned int est défini comme unsigned, même si unsigned int = -10, il est considéré comme 10.

3. Mémoire: C'est une mémoire particulièrement importante sur l'ordinateur.Tous les programmes de l'ordinateur fonctionnent dans la mémoire.
Par conséquent, afin d'utiliser efficacement la mémoire, la mémoire est divisée en petites unités de mémoire et la taille de chaque unité de mémoire est de 1 octet.
Afin de pouvoir accéder efficacement à chaque unité de la mémoire, l'unité de mémoire est numérotée, et ces numéros sont appelés l'adresse de l'unité de mémoire
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/xiaotangyu7dong/article/details/115274752
conseillé
Classement