Notas de revisión del puntero en lenguaje C

Acerca del puntero en lenguaje C (una breve discusión)

  • Introducción al problema:

    Recientemente encontré un problema con los punteros cuando estaba aprendiendo sobre la memoria compartida y estaba confundido. Esto también muestra que el propio conocimiento no es sólido. Por lo tanto, volví a tomar el libro de texto para estudiantes de primer año, revisé las sugerencias del lenguaje C y escribí este blog para facilitar la revisión futura y ayudar a otros amigos que tienen los mismos problemas que yo.

  • Fuente de conocimiento:

    1. "Programación en lenguaje C" - Tan Haoqiang
    2. "C Primer Plus" Sexta Edición

  • La importancia de los punteros : si no dominas los punteros, no dominarás la esencia de C
  • Qué es un puntero: un puntero es una dirección

  • Programa: ( Este programa se cita como el concepto a continuación )

      1. #include<stdio.h>
      2. int main(){
      3.	 int a,b;
      4.   int *pointer\_a,*pointer\_b;
      5.   a=100;b=10
      6.   pointer\_a=&a;
      7.   pointer\_b=&b;
      8.   printf("a=%d,b=%d\n",a,b);
      9.   printf("\*pointer\_a=%d,\*pointer\_b=%d\n",*pointer\_a,*pointer\_b);
      10. 
      11. 
      12. return 0;
      13. }
    

1. Cómo definir un puntero

类型 * 指针变量名(*:表示该变量类型是指针变量)
  • P.ej:

    int * puntero;

  • Precauciones:

    1. Asignación de variables de puntero

    pointer\_a=&a;pointer\_b=&b; (✔)
    *pointer\_a=&a;*pointer\_b=&b;(×)

    El puntero es la dirección, por lo que la variable de puntero solo puede contener la dirección, y para ayb, la dirección es & a, & b.

    La forma incorrecta es escribir a (* pointer_a) = & a, b (* pointer_b) = & b .

    Si desea evitar una escritura incorrecta, puede inicializar cuando defina el puntero: int * pointer_a = & a, * pointer_b = & b;

    2. Se debe especificar el tipo de base

    Motivo: el número de bytes ocupados por diferentes tipos de datos en la memoria no es el mismo.

    pointer_a ++; (agregue 4 al valor de la dirección (sizeof (int) = 4))

    3. La asignación a la variable de puntero debe ser del mismo tipo de datos

    float a;
    int *pointer;
    pointer=&a;(×)

    4. Solo se pueden almacenar direcciones en variables de puntero

    * puntero = 100; (×)

2. Cómo hacer referencia a variables de puntero

  • Atención

      &:取地址运算符。
      *:指针运算符(间接运算符)。*p是指针变量p指向的对象的值
    

(1) Asigne un valor a la variable de puntero:

p=&a;  指针变量p的值是变量a的地址,即p指向a;
*p=1;  等同于a=1;
printf("%d\n",*P);
printf("%o\n",p);输出a的地址

(2) Ejemplos de uso de variables de puntero:

1. #include<stdio.h>
2. int main(){
3.     int *p1,*p2,*p,a,b;
4.     scanf("%d,%d",&a,&b);
5.     p1=&a,p2=&b;
6.     if(a<b){
7.     p=p1;p1=p2;p2=p;
8.     }
9.     printf("a=%d,b=%d\n",a,b);
10.     printf("max=%d,min=%d\n",*p1,*p2);   
11.  return 0;
12. }

3. Cadenas, matrices de caracteres, variables de puntero

-Arreglo de caracteres

No existe un tipo de cadena real en el lenguaje C, y se puede usar una matriz de caracteres para representar una cadena porque las direcciones de sus elementos son continuas.

char str [10] = {"hola mundo"};

El lenguaje C estipula que la matriz representa la primera dirección de la ubicación de memoria donde se encuentra la matriz, y también es la dirección de str [0], es decir, str = & str [0];

而printf("%s",str); 为什么用首地址就可以输出字符串。。

¡La esencia de una constante de cadena en lenguaje C es en realidad una dirección! ! !

Fuente: https://blog.csdn.net/liusicheng2008_liu/article/details/80412586

                 La originalidad no es fácil, por favor apoye e intercambie y progresemos juntos. ! !

                             17/11/2019 15:06:59

Supongo que te gusta

Origin blog.csdn.net/HG0724/article/details/103185723
Recomendado
Clasificación