Comprensión preliminar del lenguaje c: una descripción simple de los punteros (énfasis)

Tabla de contenido

Actualmente no hablamos del uso complejo de punteros.

1. El papel del puntero

2. El concepto de dirección y el principio de conservación de datos.

un número de dirección

 ¿Por qué la dirección parece 0x00EFF858?

expresión de puntero

3. El tamaño variable del puntero.


Actualmente no hablamos del uso complejo de punteros.

1. El papel del puntero

Se pueden devolver varios o diferentes tipos de valores para compensar las deficiencias de las matrices y funciones.

En el proceso de programación, ya sea que se almacenen datos o se extraigan datos, es necesario tratar con la unidad de memoria, y la computadora expresa la unidad de memoria mediante la codificación de direcciones. El tipo de puntero es para almacenar el código de dirección y procesar los datos de dirección de la computadora.

Además de mejorar la eficiencia del programa, la función más importante del puntero es permitir una función acceda a las variables locales de otra función , por lo que el puntero es una herramienta indispensable para el intercambio de datos entre las dos funciones.

2. El concepto de dirección y el principio de conservación de datos.

primero

Necesitamos saber que la memoria de la computadora se dividirá en direcciones de unidades de memoria .

 

cuando escribimos el programa

int main()
{    
int a = 10;

    return 0;
}

Entre ellos, la variable a solicitará 4 bytes de espacio de la memoria para almacenar a (es decir, 4 celdas de memoria)


un número de dirección

#include<stdio.h>
int main()
{    
int a = 10;
printf("%p\n",&a);//将其a的地址打印出来0x00eff858
    return 0;
}

 ¿Por qué la dirección parece 0x00EFF858?

Por ejemplo, int a=10; a se aplica a 4 bytes de la memoria

0000 0000 0000 0000 0000 0000 0000 1010

Convertido a hexadecimal es 0x0000000a


expresión de puntero

 #include<stdio.h>
int main()
{    
char ah = 10;
char*ah = &ah;//char 说明ah指向的对象是char类型  *说明p是指针变量
    return 0;
}

 

*p operador de desreferenciación

#include<stdio.h>

int main()
{    
char ah = 10;

char*p = &ah;//char 说明ah指向的对象是char类型  *说明p是指针变量

*p=20//解引用操作符,意思是通过p存放的地址,找到p所指代的对象。所以*p就是p指代的对象。
printf("%d\n",a);
//最后打印出的数字为20
    return 0;
}

3. El tamaño variable del puntero.

Tamaño del operador disponible para calcular (la unidad es byte)

 #include<stdio.h>

int main()
{    
     printf("%d\n",sizeof(char*));   
     printf("%d\n",sizeof(int*));//
     printf("%d\n",sizeof(float*));
     printf("%d\n",sizeof(double*));
     printf("%d\n",sizeof(short*));

    return 0;
}

En C/C++, el tamaño de la variable de puntero es fijo y su tamaño está relacionado con el sistema operativo y el compilador. Específicamente, el tamaño de una variable de puntero suele ser de 4 bytes u 8 bytes, según el bitness del sistema operativo y el compilador.

En un sistema operativo de 32 bits, el tamaño de una variable de puntero suele ser de 4 bytes; en un sistema operativo de 64 bits, el tamaño de una variable de puntero suele ser de 8 bytes.

Esto se debe a que el ancho del bus de direcciones del sistema operativo de 32 bits es de 32 bits, que puede direccionar hasta 2^32 (4 8 bits o 4B) unidades de memoria, por lo que una variable de puntero necesita 4 bytes para almacenar la dirección. El sistema operativo de 64 bits tiene un ancho de bus de direcciones de 64 bits y puede direccionar hasta 2^64 (8 8 bits u 8 B) unidades de memoria, por lo que una variable de puntero requiere 8 bytes para almacenar la dirección.

Cabe señalar que el tamaño de una variable de puntero solo está relacionado con el espacio de direcciones, pero no con el tipo de objeto al que apunta. No importa a qué tipo de objeto apunte la variable puntero, su tamaño es fijo.

Consulte el espacio máximo de direcciones de memoria admitido de 32, 64
 

Supongo que te gusta

Origin blog.csdn.net/fcccfffg/article/details/132039175
Recomendado
Clasificación