Leí en un libro C que para una matriz num[7]
el término num
es equivalente a &num[0]
. Este concepto funcionaba bien para mí, pero cuando escribí este programa que se muestra a continuación, nuevamente me confundí.Dado `int num [7]`, ¿cómo se diferencian `num`,` & num [0] `,` & num`?
#include<stdio.h>
#include<conio.h>
int main()
{
int num[]={21,22,23,24,25,26,27};
int *x,*y,*z;
x=#
y=num;
z=&num[0];
printf("%d %d %d\n",sizeof(x),sizeof(y),sizeof(z));
printf("%d %d %d\n",sizeof(&num),sizeof(num),sizeof(&num[0]));
printf("%d %d %d",*(&num),*(num),*(&num[0]));
getch();
return 0;
}
salida es:
4 4 4
4 28 4
2293536 21 21
Si num
es idéntica a &num[0]
entonces ¿por qué hay una diferencia en su tamaño? ¿Y cuál es este tercer tipo de término &num
? Sé que está mostrando un valor de basura, pero ¿tiene sentido este tipo de término? z=&num[0]
Ya lo entiendo. El compilador muestra una advertencia para la asignación x=&num
, pero para el y=num;
el compilador no tiene ningún problema. Si num
tiene el tamaño 28
, ¿por qué se asignó a un puntero entero y
sin un tipocast?
Luego probé en la matriz 2-D de esta manera:
#include<stdio.h>
#include<conio.h>
int main()
{
int s[4][2]={{1234,56},{1235,57},{1236,58},{1237,59}};
int i
printf ("\n%d %d %d %d %d",sizeof(s[i]),sizeof(&s[i]),sizeof(s),
sizeof(s[0][0]),sizeof(&s));
getch();
return 0;
}
Ahora el resultado es
8 4 32 4 4
Aquí sizeof(s[i])
es 8
. porque s[i]
es una matriz 1-D y tiene dos elementos, por lo que está bien. Pero no tengo idea de qué significan los términos &s[i]
y &s
. Y nuevamente puedo ver que s
no es idéntico a s[0][0]
. He utilizado la versión Dev C++ 4.9.9.2 para ejecutar todos los programas. Quiero ser claro en estos tres tipos de términos.
Lea las preguntas frecuentes C que tiene una sección entera dedicada a este tema: http://c-faq.com/aryptr/index.html – AnT
pregunta @good para los principiantes ! buddy – niko