[СИ] структуры, массивы и sizeof().
Язык СИ
ОС UNIX
Ниже приведена небольшая тестовая программа
на проверку sizeof().
#include <stdio.h>
#include <stdlib.h>
// cd /usr/home/test3test/njx
// gcc test_sizeof.c -o test_sizeof.cgi
// ./test_sizeof.cgi
#define N 6
//--- структура параметров хоста ---
typedef struct {
int port;
char host[100];
} _lin;
//-------------- main --------------
int main()
{
_lin lin[N]; //--- массив структур ---
int k;
k=funk_1(lin);
printf("k=%d\n",k);
exit(0);
}
//-------------- funk_1 --------------
int funk_1(_lin lin[]){
int k;
k=funk_2(lin);
return(k);
}
//-------------- funk_2 --------------
int funk_2(_lin lin[]){
int k;
k=sizeof(lin[0].host);
// k=sizeof(_lin.host);
// k=sizeof(_lin);
return(k);
}
Во вложенные функции передается массив lin[ ],
вернее указатель на него.
Выдача этой программы
k=100
т. е. длина массива host.
Мне как раз и нужно в нижней вложенной
функции funk_2() получить длину этого массива.
Там ещё есть закомментированная строка, которую
я тоже попробовал, но с ней не компилится.
Вопрос.
Случайность ли это или правило?
Не скомпилирует ли другой «правильный» компилятор
по другому?
Кто знает прошу ответить.