Hola. Quería preguntar si el hecho de que un arreglo se apunte a si mismo es coincidencia o es una característica de ANSI C, es decir, la dirección del arreglo y la dirección a la que apunta el arreglo es la misma (al menos eso me pasa con MinGW-w64).
int arreglo[4];
if(arreglo == &arreglo) { // Siempre me da 'true'
...
}
Gracias
No es coincidencia el estándar garantiza que arreglo y &arreglo siempre apuntaran a la misma dirección (el primer elemento del array) pero tienen tipos diferentes no es lo mismo hacer
arreglo + 1
Y
&arreglo + 1
En 32 bits sí que sería lo mismo XDD
En 64 bits no, pues la primera se incrementa en 4 y la segunda en 8 :P
Gracias :D
Cita de: class_OpenGL en 4 Junio 2016, 21:27 PM
En 32 bits sí que sería lo mismo XDD
En 64 bits no, pues la primera se incrementa en 4 y la segunda en 8 :P
Gracias :D
Supongamos el siguiente arreglo:
int arreglo[8];
arreglo es de tipo
int* un puntero al primer elemento de arreglo
&arreglo es de tipo
int (*)[8] un puntero a un arreglo de 8 enteros
Por lo tanto si hacemos
arreglo + 1 incrementara 4 bytes (suponiendo int == 4 bytes) pero
&arreglo + 1 sabiendo que es un puntero a arreglo de 8 ints el incremento sera 4 * 8 = 32 saltamos 8 bytes justo despues del final de arreglo. Puedes comprobar esto haciendo:
#include <stdio.h>
int main()
{
int array[8];
int n = *(&array + 1) - array;
printf("Size array = %d\n", n); //Debe imprimir 8
return 0;
}
Ups. No consideré el tamaño del arreglo... qué despiste el mío XDD Gracias por la aclaración