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:
- "Programación en lenguaje C" - Tan Haoqiang
- "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