Re: [問題] struct的疑問
看板C_and_CPP (C/C++)作者a127a127 (TDYa127)時間16年前 (2009/05/23 18:50)推噓2(2推 0噓 9→)留言11則, 2人參與討論串2/2 (看更多)
※ 引述《kuopin (Kuopin)》之銘言:
: #include<stdio.h>
: int main(void){
: typedef struct{
: int hour,minutes;
: double second;
: } time;
: typedef struct{
: int year,month,day;
: time hour,minutes,second;
: } date;
: date now = {2004,4,7,{12,50,29.51}};
: printf("now=%.2d/%.2d/%.2d %.2d:%.2d:%.2f\n",now.month,now.day,now.year,now.hour,now.minutes,now.second);
: printf("sizeof(now)=%d\n",sizeof(date));
: }
: 以上是我們老師要我們練習結構的練習題
: 我已經解出來...不過老師有要求我們用sizeof去抓now的大小...
: 我抓出來的結果是64...可是老師給的答案是32....
: 不知道哪裡出了問題? 能否請版友幫我看一下+"
: 對巢狀結構不太了解....
你和老師都對,因為你寫的不是老師要的。(老師要的那種才是邏輯上比較正確的)
typedef struct{
int hour,minutes;
double second;
} time;
time是一個struct,裡面有hour(int)、minutes(int)、second(double)。
用起來像下面這樣:
time x;
x.hour = 1;
x.minutes = 2;
x.second = 3.0;
typedef struct{
int year,month,day;
time hour,minutes,second;
} date;
date是一個struct,裡面有
year(int)、month(int)、day(int)、hour(time)、minutes(time)、second(time)。
hour、minutes、second都是time型態的變數,
所以裡面分別也有自己的hour、minutes、second。
date x;
x 是一個 date
x.hour 是一個 time
x.hour.hour 才是一個 int
而你的答案會對,只是剛好而已,(詳細的情形,以後學到可變長度的參數就知道了。)
實際上,printf根本沒有印到now.minutes,now.second。
你的時間全部都是存在now.hour
(因為剛剛講的,這是一個time,裡面還有自己的hour、minutes、second。)
(其實你的編譯器可能有給你兩個warning,
說初始化列少了date::minutes和date::second。)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.31.130.98
推
05/23 22:19, , 1F
05/23 22:19, 1F
→
05/23 22:19, , 2F
05/23 22:19, 2F
→
05/23 22:19, , 3F
05/23 22:19, 3F
→
05/23 23:21, , 4F
05/23 23:21, 4F
→
05/23 23:22, , 5F
05/23 23:22, 5F
推
05/23 23:35, , 6F
05/23 23:35, 6F
→
05/23 23:35, , 7F
05/23 23:35, 7F
→
05/23 23:36, , 8F
05/23 23:36, 8F
→
05/23 23:37, , 9F
05/23 23:37, 9F
→
05/23 23:37, , 10F
05/23 23:37, 10F
→
05/23 23:38, , 11F
05/23 23:38, 11F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章