亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1470 | 回復(fù): 3
打印 上一主題 下一主題

[C] 數(shù)據(jù)類型沒有匹配上導(dǎo)致的疑問 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-07-19 23:51 |只看該作者 |倒序瀏覽
#include <stdio.h>

struct test {
    int data;
    int name;
};

struct bwt {
    struct test atest;
    int first;
    int second;
    int third;
};

int main()
{
    struct bwt test1[4];
    test1[0].atest.data = 50;
    test1[0].atest.name = 70;
    test1[0].first = 10001;
    test1[0].second = 200;
    test1[0].third = 300;

    printf("test1.atest.data:\t%d\ntest1.first:\t%d\ntest1.second:\t%d\ntest1.third:\t%d\n", test1[0], test1[0].first, test1[0].second, test1[0].third);
   
    return 0;
}

===========程序結(jié)果===================
deron@deron-desktop:/home/work$ ./test
test1.atest.data:        50
test1.first:                        70
test1.second:                10001
test1.third:                200

希望各位大蝦能否解釋下上面這個問題。在獲取test1.atest.data的值得時候直接用test1[0],這樣導(dǎo)致后面test1[0].first,test1[0].second, test1[0].third都不能獲得正確的。

論壇徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亞冠之阿爾薩德
日期:2015-06-12 22:53:29午馬
日期:2014-04-15 11:08:53亥豬
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥豬
日期:2013-11-28 12:03:13雙魚座
日期:2013-11-21 14:43:56亥豬
日期:2013-10-23 10:55:49處女座
日期:2013-10-17 18:15:43午馬
日期:2013-09-27 17:40:4215-16賽季CBA聯(lián)賽之青島
日期:2016-06-22 00:45:55
2 [報告]
發(fā)表于 2013-07-20 00:45 |只看該作者
本帖最后由 Ager 于 2013-07-20 00:58 編輯

(1)根據(jù)代碼中的第一個格式轉(zhuǎn)換操作“%d”,printf函數(shù)期望其第二個參數(shù)是int類型的,但你卻在代碼中提供了一個struct bwt類型的數(shù)據(jù),導(dǎo)致編譯器將這個struct bwt類型的數(shù)據(jù)當(dāng)作int類型的來“看待”和“使用” —— 且不會報錯,至多會Warning。

(2)printf函數(shù)利用了C語言提供的“可變長參數(shù)列表”機(jī)制,使得它可以處理“任意多”的參數(shù) —— 除了某些庫函數(shù)具有這種特性之外,程序員自己也可以實現(xiàn)這一點,即利用<stdarg.h>提供的工具(即va_list這個類型以及va_start、va_arg、va_end、va_copy這四個宏)—— 你可以仔細(xì)研究一下“可變長參數(shù)列表”是怎么實現(xiàn)的。

以上兩點,綜合作用之下,就會產(chǎn)生樓主你得到的這種“奇怪”的結(jié)果了。

可以證明的是:你將你這個printf函數(shù)調(diào)用中的后幾個參數(shù),拆開、分別用到幾個單獨的printf函數(shù)調(diào)用中,即讓printf函數(shù)調(diào)用一次只有兩個參數(shù):一個格式串以及一個“單獨”的被前者所需要的數(shù)據(jù)(變量),就不會有這種“奇怪”結(jié)果了。

僅供參考:)



論壇徽章:
0
3 [報告]
發(fā)表于 2013-07-23 23:52 |只看該作者
回復(fù) 2# Ager
謝謝Ager,看了可變長參數(shù)列表的實現(xiàn),基本明白了為什么會照成我這個現(xiàn)象。

   

論壇徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46處女座
日期:2013-10-24 14:25:01酉雞
日期:2014-04-07 11:54:15
4 [報告]
發(fā)表于 2013-07-24 11:07 |只看該作者
不定參數(shù)傳入struct bwt, 那么在參數(shù)棧上占用的是sizeof(struct bwt ), 而%d只解析sizeof(int),導(dǎo)致后續(xù)全部錯位。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP