Я прочитал в книге 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 без typecast?
Затем я попытался на 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 С++ 4.9.9.2 для запуска всех программ. Я хочу быть понятным в этих трех типах терминов.