tipos tamaño semejanzas entre diferencias diferencia cuadro comparativo bacterias bacteria c pointers multidimensional-array

c - semejanzas - tamaño de virus



Por favor explique la diferencia (4)

Bueno, son cosas diferentes. arr descompone en la mayoría de los contextos en un puntero al primer elemento de su matriz, lo que significa un puntero a la primera fila de 3 elementos en su matriz 2D: escriba int (*)[3] . arr + 1 , entonces, apunta a la segunda fila en la matriz.

&arr es la dirección de la matriz en sí (escriba int (*)[3][3] ), por lo que &arr + 1 puntos &arr + 1 a la memoria justo después del final de la totalidad de su matriz 2D.

Puede confirmar este comportamiento fácilmente imprimiendo de manera diferente. Específicamente, imprimir los desplazamientos a los nuevos punteros en lugar de los valores en sí mismos ayudará a aclarar las cosas. El resultado de su programa a partir de estas declaraciones impresas:

printf("%ld/n",(intptr_t)(&arr+1) - (intptr_t)arr); printf("%ld/n",(intptr_t)(arr+1) - (intptr_t)arr);

Serán los desplazamientos decimales a &arr+1 y arr+1 respectivamente. Aquí está el resultado de una prueba que acabo de hacer:

36 12

36 coincidencias arriba: 3 filas × 3 columnas × 4 bytes por entrada = 36 bytes. Lo mismo ocurre con la fila 12: 1 × 3 columnas × 4 bytes por entrada = 12 bytes.

Nota: también está imprimiendo punteros usando %d , lo cual es incorrecto. Probablemente deberías estar usando %p para eso.

tengo un programa sobre matrices en 2-D

la dirección base es 8678

#include<stdio.h> #include<conio.h> main() { int arr[3][3]={ {83,8,43}, {73,45,6}, {34,67,9} }; printf("%d ",&arr+1); //points to 8696 printf("%d ",arr+1); //points to 8684 return 0; }

¿ arr+1 es la diferencia entre arr+1 y &arr+1 ?


Puede resolver esto con la ayuda de esta equivalencia: X [Y] === * (X + Y)

Desde * (arr + 1) === arr [1], arr + 1 === & arr [1]

Del mismo modo, & arr + 1 === & ((& arr) [1])

¿Qué es (y arr) [1]? Bueno, (& arr) [0] === * & arr === arr, es decir, la matriz de 3x3, así que (& arr) [1] es la matriz de 3x3 que sigue a eso, y & arr + 1 === & (( & arr) [1]) es la dirección de la matriz 3x3 que sigue y arr ... un puntero al byte justo después de la matriz completa.


array + 1 significa la dirección de la matriz [1] y cuesta 3 int de memoria.

& array + 1 significa la dirección de array [0] add 1;


Arr + 1 da el siguiente elemento en una matriz, mientras que arr + 1 da la dirección de la siguiente matriz de enteros