Lenguaje C de entrada a entrada.

1. En lenguaje C, puede usar la palabra clave const para modificar el puntero y limitar el acceso al espacio de memoria al que apunta el puntero .

        int *const ptr3 = arr;  

        *ptr3 = 998; 

        ptr3 apunta a la matriz arr, el valor del elemento señalado por ptr3 se puede modificar, pero el elemento señalado por ptr3 no se puede modificar, por ejemplo: ptr = arr; ×

       

        int const *ptr = &a; // Puntero de destino constante, solo se puede reemplazar pero no modificar el valor,

        ptr=&b;

2. Forma cómoda de escribir el tipo de burbujas

for (i = 0; i < 3; ++i){ // Ordena la matriz usando la clasificación de burbujas

        para (j = 0; j < 2 - i; ++j){

            if (arr[j] > arr[j + 1])arr[j] ^= arr[j + 1] ^= arr[j] ^= arr[j + 1];  

        }

}

3. Mida la longitud de la matriz.

int arreglo[10] = {1,2,3,4,5,6,7,8,9,10};

int sz = tamaño de (arr) / tamaño de (arr [0]);

4. Operadores bit a bit

Descartar a la izquierda, agregar 0 a la derecha;

int a = 2;

int b = a << 1; // Desplaza el bit binario de a 1 bit hacia la izquierda; b es 4,

a: 00000000000000000000000000000010

b : 0|000000000000000000000000000010+0

El lado derecho se descarta y el lado izquierdo se rellena con 0;

int a = 10;

int b = a >> 1;

a: 00000000000000000000000000001010

segundo: 0+0000000000000000000000000000101|0

5. Almacenamiento de números negativos

El número negativo -1 debe almacenarse en la memoria y la memoria se almacena en complemento a dos (255 - 1)

6. Operadores bit a bit

 7. La diferencia entre los accesores a la estructura:

definición:

estudiante de estructura { nombre de char [20]; edad interna; };

estructura estudiante estu = {"Alicia", 18};

Operación de punto: (acceder a los miembros de la estructura a través de nombres de variables de estructura)

printf("Nombre: %s, Edad: %d\n", stu.nombre, stu.edad);

Operación de flecha: (acceder a los miembros de la estructura a través de punteros de estructura)

estudiante de estructura *pstu = &stu;

printf("Nombre: %s, Edad: %d\n", pstu->nombre, pstu->edad);

8. Suma y resta de punteros

 Evite punteros salvajes, int* p = NULL; // Úselo cuando no sepa qué valor dar, incluso si asigna NULL

9. El papel de la resta de punteros

int arreglo[10] = {1,2,3,4,5,6,7,8,9,10};

printf("%d\n", &arr[9] - &arr[0]); // Obtiene el número de elementos entre el puntero y el puntero

10. Determine el tamaño del endian del sistema.

        Porque cuando una máquina little endian almacena datos de varios bytes, el byte bajo viene primero y el byte alto le sigue, es decir, 0x01020304 se almacena como 0x04030201 en una máquina little endian. Si el byte bajo de a no es 1, significa que el orden de bytes de la máquina actual es big endian.

int a = 1;

char* pa = (char*)&a; // Aquí necesitas realizar una conversión de tipo forzada

if(*pa == 1)printf("little endian");

de lo contrario printf("big endian");

 11. Tipo sin firmar sin firmar____

El rango de caracteres con signo es: -128 ~ 127

El rango de caracteres sin firmar es: 0 ~ 255

12. Almacenamiento de números de coma flotante.

        El número binario de coma flotante V se puede expresar de la siguiente forma:  (-1)^S * M * 2^E

      ① (-1)^s representa el bit de signo, cuando s = 0, V es un número positivo; cuando s = 1, v es un número negativo

      ② M representa un número válido, mayor o igual a 1, menor que 2

      ③ 2^E significa exponente

Ejemplo: Binario: 101,1 → 1,011 * 2^2 → (-1) ^0 * 1,011 * 2^2

                   Guardar como: s=0 M=1.011 E=2

13. Cómo escribir un puntero de matriz

for(i=0; i<10; i++)
    {         //Las siguientes expresiones son todas equivalentes         printf("%d ", p[i]);         printf("%d ", *(p+i));         printf ( "%d ", *(arr+i));         printf("%d ", arr[i]); //arr[i] == *(arr+i) == *(p+i) = = p[yo]     }





Matriz de punteros: int* parr1[10];

Puntero de matriz: int (*parr2)[10];

Matriz de punteros de matriz: int (*parr3[10])[5];

14. Paso de parámetros de matriz bidimensional

15. Puntero de función

int Agregar(int x, int y)return x + y;

int (*pf)(int, int) = &Add; //puntero de función

 Matriz de punteros de función:

pfArr es una matriz de punteros de función y el interior de {} es el nombre de la función

int (*pfArr[5])(int, int) = {NULL, Agregar, Sub, Mul, Div};

usar:

entrada interna = 0;

for(input =1;input<5;input++) (pfArr[input])(x, y); //Ejecuta cada función por separado

 16. Función de devolución de llamada del lenguaje C

void Calc(int (*pf)(int, int))
{     int x = 0;     int y = 0;     printf("Ingrese 2 operandos:>");     scanf("%d %d", &x, &y) ;     printf("%d\n", pf(x, y)); }





Uso: En otras funciones: Calc(Add);//Add es una nueva función

17. Notas sobre el uso de punteros.

Si no está inicializado   : int* p = NULL; // inicializado a NULL

Desreferenciación de punteros : antes de desreferenciar, es necesario asegurarse de que se haya asignado el bloque de memoria al que apunta el puntero.

si (p == NULL) {retorno 1;}

Libere el puntero después de su uso :

free(p); // libera el bloque de memoria

p = NULL; // asigna el puntero a NULL

Debe asegurarse de que los tipos de punteros coincidan :

int a = 10;

flotador b = 3,14;

int* p = &a; // puntero de tipo int apunta a la variable de tipo int

float* q = &b; // puntero de tipo float apunta a la variable de tipo float

18. Registro de operaciones en lenguaje C

Asigne un valor de 1 al bit 6 de un registro:

 registro:

 19. Definición de macro con parámetros

Para evitar verse afectado por la precedencia de llaves, punto y coma, operadores, etc. 

20. Uso detallado de punteros.

1.

char ch = 'a';

char *p = &ch;                   ------->*p == p[0] ='a';

2.

char ch[] = {'a','\0'}; -----------ch es igual a &ch[0]              ------->*ch==ch[0 ]= ='un'

3.

    ent a;

    int *p = &a;

    a = 10;

    *p = 9;

    printf("a = %d\n", a); // la salida es 9

    printf("&a = %d\n", &a); // Genera la dirección de a, es decir, la dirección de la variable a en la memoria

    printf("p = %d\n", p); // Muestra el valor de p, es decir, la dirección de un

    printf("p = %d\n", &p); // Genera la dirección de p, el resultado de salida es 4 en el sistema de 32 bits y el resultado de salida es 8 en el sistema de 64 bits

    printf("*p = %d\n", *p); // Genera el valor señalado por p, es decir, el valor de a, y el resultado de salida es 9

4.

    intb[5] = {1, 2, 3, 4, 5};

    printf("b = %d ,*b = %d, *(b+1) = %d, *(b+2) = %d\n",b, *b, *(b+1), * (b+2));

    //b = -13328 ,*b = 1, *(b+1) = 2, *(b+2) = 3

5. Modo de salida de matriz de cadenas

    char *str = "Te amo";

    int i, longitud;

    longitud = strlen(cadena);

    para (i = 0; i < longitud; i++)

    {

        printf("%c", cadena[i]);

    }

//Te amo

6.

    chararr[] = "abcdef";

    char *p = arr;

    printf("*p %c\n", *p); // a

    printf("p %c\n", p[0]); // a B C D e F

    printf("p %s\n", p); // a B C D e F

    printf("arr %s\n", arr); // a B C D e F

    printf("&p %d\n", &p); //-13312

Supongo que te gusta

Origin blog.csdn.net/JohnJill/article/details/130238290
Recomendado
Clasificación