Я читал в книге C, что для массива num [7]
термин num
эквивалентен & num [0]
]. Эта концепция работала у меня нормально, но когда я написал эту программу, показанную ниже, я снова запутался.
#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;
}
вывод:
4 4 4
4 28 4
2293536 21 21
Если num
идентичен & num [0]
тогда почему разница в их размерах? И что это за третий тип термина & num
? Я знаю, что он показывает значение мусора, но имеет ли смысл этот тип термина? z = & num [0]
Я уже понял. Компилятор показывает предупреждение для присваивания x = & num
, но для y = num;
у компилятора нет никаких проблем. Если num
имеет размер 28
, то почему он был назначен целочисленному указателю y
без приведения типа?
Затем я попробовал на 2-мерном массиве это путь:
#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;
}
Теперь вывод
8 4 32 4 4
Здесь sizeof (s [i])
равен 8
. потому что s [i]
является одномерным массивом и имеет два элемента, так что все в порядке. Но я понятия не имею, что означают термины & s [i]
и & s
. И я снова могу видеть, что s
не идентично s [0] [0]
. Я использовал версию Dev C ++ 4.9.9.2 для запуска всех программ. Я хочу прояснить эти три типа терминов.