Página de inicio personal: Bienvenidos todos --> Populus euphratica bajo el desierto
Chicos, son tan hermosos
Si encuentra útil el artículo
Puedes apoyar a los bloggers con un clic
Cada gramo de su preocupación es la fuerza que me impulsa a perseverar.
☄: El enfoque de este problema: algunas preguntas de pincel de lenguaje C son propensas a errores
Espero que todos tengan un feliz estudio y trabajo todos los días.
1. Sobre las variables globales
4. La diferencia entre "A" y 'A'
5. Sobre el almacenamiento de datos
6. Acerca de las matrices bidimensionales
1. Sobre las variables globales
¿No puede usar una variable global antes de que se defina?
extern int a; int main() { printf("a = %d\n", a); return 0; } int a = 10;
Echemos un vistazo: en primer lugar, la definición de int a está después de la función principal, y puede usarse por declaración.
Esencia: en primer lugar, a las variables globales se les ha asignado espacio de memoria cuando el programa se está ejecutando, por lo que se pueden usar antes de que se definan.
2. Acerca de scanf
Agregue una declaración de entrada adecuada en la línea horizontal e ingrese desde el teclado durante la ejecución del programa: ¿Cómo está? <Entrar>, el resultado final es: ¿Cómo está?
int main() { char *a = "How are you?", b[20]; —————————————————————————————— printf("%s %s\n", a, b); return 0; }
A:obtiene(b) B:scanf("%s",b)
El final de gets es una nueva línea ('\n')
El final de scanf es la tecla de tabulación de retorno de carro de espacio, que es un carácter continuo.
Entonces deberías elegir B:scanf("%s",b)
3. Práctica de puntero
int a[10] = { 1, 2, 3, 5, 5, 6, 7, 8, 9, 10 }; int x = 0; int *pa = a;
Con la definición anterior, ¿cuál de las siguientes asignaciones no asigna el elemento con el subíndice 3 de la matriz a x?
A:x = pa[3] B:x= *(a+3)
C: x =a[3] D:x = *pa+3
Bajo análisis:
R: Correcto, aunque pa es un puntero, se puede acceder a él en forma de matriz.
B: Correcto, a es la dirección del primer elemento, mueva el tamaño de 3 ints sucesivamente, solo acceda al elemento con el subíndice 3 y asigne el valor en la desreferencia
C: Correcto, el valor con el subíndice 3 se asigna a x en forma de matriz.
D: Error, en primer lugar, es directamente desreferenciar a es el primer elemento de la matriz, y luego +3, esto no es correcto.
4. La diferencia entre "A" y 'A'
Primero, el carácter 'A' es un solo carácter, y "A" son dos caracteres, A y \0, no son lo mismo.
5. Sobre el almacenamiento de datos
Mira directamente el código:
unsigned short A = 10; printf("~A = %u\n", ~A); char c = 128; printf("c = %d\n", c);
Analicemos A:
Almacenado en el espacio A es 00000000 00001010, y luego la inversión bit a bit de A se convierte en 11111111 11110101
Luego imprima de acuerdo con %u, es decir, de acuerdo con la impresión de enteros sin signo, es 11111111 11111111 11111111 11110101
El resultado de la impresión es 4294967285
Luego analiza c:
c es 128, el espacio de almacenamiento es 10000000, se está imprimiendo %d, por lo que la configuración se actualiza a
11111111 11111111 11111111 10000000, que es complemento,
Convertir a complemento de uno 10000000 000000000 00000000 01111111
El código original es 10000000 000000000 00000000 10000000,
La última impresión es -128
6. Acerca de las matrices bidimensionales
Los siguientes resultados de salida:
char arr[2][4]; strcpy(arr[0], "you"); strcpy(arr[1], "me"); arr[0][3] = '&'; printf("%s \n", arr);
Analicemos primero:
Los datos después de la primera copia son,
Los datos después de la segunda copia son,
En este momento, si imprimimos directamente con %s, se imprimirá hasta el final de '\0', pero hemos realizado una operación de asignación y hemos reemplazado '\0' en arr[0][3] con ' $ ' , por lo que el resultado es "tú y yo".
7. Precedencia de operadores
¿Es *p++ el puntero de autoincremento p o a lo que apunta el puntero de autoincremento p?
Mira el código:
int a = 10; int *p = NULL; int **pp = NULL; p = &a; pp = &p; printf("%d\n", *pp); printf("%d\n", *p++); printf("%d\n", *pp);
Podemos ejecutarlo directamente y concluir que es la variable puntero p la que se autoincrementa.
Hay dos escuelas de interpretación:1. Interpretado en C y punteros, bajo la misma prioridad, la asociatividad es de derecha a izquierda.
2. En el diagrama de prioridad, postfix ++ tiene mayor prioridad que dereference (*).
¡Discutamos esto en nuestro foro!