Puntero de Xiaojie al proceso de aprendizaje

1. Variables de puntero y variables ordinarias

Según tengo entendido, los valores de las variables ordinarias son solo los valores utilizados por los programadores y los programas, y los valores de las variables de puntero son diferentes. Su valor almacena las direcciones de otras variables.

Para definir una variable de puntero y definir una variable común y sus conocidos, simplemente agregue un asterisco (*) delante del nombre de la variable, puntero = * variable. Eso es:

int *p;

O:

int a[10];
int *p = &a;

Entre ellos, el asterisco ( ) es un símbolo especial, que indica que una variable es una variable exponencial, debe definirse con un asterisco ( ), pero no puede asignarse con un asterisco.

Los punteros también se pueden definir continuamente, cada uno debe estar marcado con un asterisco (*), como:

int *a, *b, *c;

Pero no:

int *a, b, c;

Esta definición significa que se definen una variable de puntero ay dos variables ordinarias byc.

Obtenga el valor señalado por la variable puntero

La variable de puntero almacena la dirección de los datos, y los datos en esta dirección se pueden obtener a través de la variable de puntero en el formato:

*q

Su significado es: * puntero = puntero especifica el valor de la variable.

Aquí hay un ejemplo:

#include<stdio.h> 

int main()
{    
    int a = 100;
    int *q = &a;
    printf("%d,%d",a,*q);
    return 0;
} 

Resultado de la operación:

100,100

El puntero no solo puede obtener los datos en la memoria, sino también modificar los datos en la memoria, por ejemplo:

#include <stdio.h>

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

Resultado de la operación:

55, 55, 55, 55

Debe tenerse en cuenta que al definir una variable de puntero, use un asterisco ( ) para indicar que es una variable de puntero, y cuando use una variable de puntero, un asterisco ( ) indica el valor señalado por el puntero.

2. Variables de puntero y matrices unidimensionales

Los contenidos principales son: puntero = & nombre de matriz [algún número] * puntero = puntero a valor variable puntero + i = & nombre de matriz [algún número + i]

Aquí hay un ejemplo:

#include <stdio.h>

int main()
{
    int *p, *q, a[3] = {5,10,15};
    p = &a[0];
    q = &a[1];
    printf("开始时a[0]=%d,a[1]=%d,a[2]=%d\n",a[0],a[1],a[2]);
    *p = *p*2;
    *(q + 1) = *p*2;
    printf("运算后a[0]=%d,a[1]=%d,a[2]=%d\n",a[0],a[1],a[2]);
    return 0;
}

Resultado de la operación:

开始时a[0]=5,a[1]=10,a[2]=15
运算后a[0]=10,a[1]=10,a[2]=20

Explicación: Al principio definimos una matriz unidimensional a, y dos variables de puntero p, q. Señalamos p a a [0] yq a a [1]. Al principio a [0] = 5. Entonces la operación * p = * p * 2 es multiplicar el valor apuntado por el puntero p (es decir, el valor de a [0] 5) por 2, por lo que finalmente a [0] = 5 * 2 = 10.

Al comienzo de la misma razón, a [0] = 10 (porque la operación se realizó en el paso anterior), q apunta a a [1], y luego la operación * (q + 1) = * p * 2 es dejar que el puntero (q + 1) apunte a El valor de a [1 + 1] = a [2] es * p * 2 = 10 * 2 = 20.

3. Variables de puntero y matrices bidimensionales

El contenido principal es: puntero = & nombre de matriz [número a] [número b] * puntero = puntero apunta al puntero de valor de la variable + i = & (el elemento i-ésimo después del nombre de matriz [número a] [número b]) está asociado El elemento i-ésimo después de la matriz

Aquí hay un ejemplo:

#include <stdio.h>

int main()
{
    int *p, *q, a[2][3] = {{1,2,3},{4,5,6}};
    p = &a[0][0];
    q = &a[1][1];
    printf("开始时a[0][0]=%d,a[1][2]=%d\n",a[0][0],a[1][2]);
    *p = *p*2;
    *(q + 1) = *p*2;
    printf("运算后a[0][0]=%d,a[1][2]=%d\n",a[0][0],a[1][2]);
    return 0;
}

Resultado de la operación:

开始时a[0][0]=1,a[1][2]=6
运算后a[0][0]=2,a[1][2]=4

Explicación: Al principio definimos una matriz bidimensional a, y dos variables de puntero p, q. Señalamos p a a [0] [0] yq a a [1] [1]. Al principio a [0] [0] = 1. Luego realice la operación * p = * p * 2 es dejar que el valor señalado por el puntero p (es decir, el valor de a [0] [0] 1) se multiplique por 2, por lo que al final a [0] = 1 * 2 = 2.

De manera similar, cuando a [1] [1] = 5, q apunta a a [1], y luego realiza una operación * (q + 1) = * p * 2 es hacer que el puntero (q + 1) apunte a a [1] [ El primer número después de 1], es decir, el valor de a [1] [2] es * p * 2 = 2 * 2 = 4.

4. La variable de puntero apunta a la variable de fila de la matriz bidimensional

Definición: * (p) [número de columnas]

Asociación: p = nombre de matriz bidimensional + algún número n

Equivalente a * (* (p + i) + j) = nombre de matriz bidimensional [p + i] [j]

Por ejemplo:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[4];
p = a + 1;
a[1][2] = *(*p + 2);
a[2][2] = *(*(p + 1) + 2);

El ejemplo anterior crea una matriz bidimensional con tres filas y dos columnas. Definimos un puntero p para apuntar a la variable de fila de la matriz bidimensional. El significado de comenzar a hacerlo igual a a + 1 es señalarlo a la segunda línea, luego * p = 1.

Entonces podemos obtener los siguientes dos conjuntos de ecuaciones a [1] [2] = * (* p + 2) y a [2] [2] = ( (p + 1) + 2).

10 artículos originales publicados · Me gusta0 · Visitas 54

Supongo que te gusta

Origin blog.csdn.net/z55947810/article/details/105583190
Recomendado
Clasificación