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

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
1234下一頁
最近訪問板塊 發(fā)新帖
查看: 18879 | 回復(fù): 32
打印 上一主題 下一主題

[C] 為什么判斷結(jié)構(gòu)體相等要這么復(fù)雜呢? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-07-19 14:24 |只看該作者 |倒序?yàn)g覽
為什么不能直接 == 呢???

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-07-19 14:25 |只看該作者
我是說:為什么可以用 = 賦值,卻不可以用 == 判斷相等?
這才是我疑惑的~~

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-07-19 14:33 |只看該作者
原帖由 77h2_eleven 于 2008-7-19 14:24 發(fā)表
為什么不能直接 == 呢???

對于C語言來說,它的結(jié)構(gòu)體名稱其實(shí)只是代表它成員變量的第一個(gè)元素。
比如說

  1. struct sa
  2. {
  3. int a;
  4. char buf[10];
  5. };

  6. struct sa ss;

  7. 那么如果調(diào)用printf("%d\n", ss);與調(diào)用printf("%d\n", ss.a)的效果是一樣的。
復(fù)制代碼

所以不能夠用這種方法來比較。

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
4 [報(bào)告]
發(fā)表于 2008-07-19 14:33 |只看該作者
原帖由 77h2_eleven 于 2008-7-19 14:25 發(fā)表
我是說:為什么可以用 = 賦值,卻不可以用 == 判斷相等?

因?yàn)?C 就是那么規(guī)定的。btw,可能他們覺得這種比較不常用,也無法高效的實(shí)現(xiàn)。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-07-19 14:35 |只看該作者
而且結(jié)構(gòu)體里面可能還有指針,你該如何判斷兩個(gè)指針是否相同,是根據(jù)指針?biāo)赶虻膬?nèi)容來判斷還是僅僅根據(jù)指針的值來判斷。也是需要程序員自己來定義的。

論壇徽章:
95
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀(jì)念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
6 [報(bào)告]
發(fā)表于 2008-07-19 14:40 |只看該作者
原帖由 scutan 于 2008-7-19 14:33 發(fā)表

對于C語言來說,它的結(jié)構(gòu)體名稱其實(shí)只是代表它成員變量的第一個(gè)元素。

其實(shí)最真實(shí)的原因是無法對結(jié)構(gòu)體比較提供高效的實(shí)現(xiàn)。在 C 中,結(jié)構(gòu)體可能有填充位,這些填充位的值是未定義的,因此結(jié)構(gòu)體的比較就只能是逐個(gè)比較其成員,而這種比較方式的效率是很低的(例如碰到很大的結(jié)構(gòu)體),這和  C 追求的高效背道而馳。另外,由于結(jié)構(gòu)體比較這種需求比較少,強(qiáng)迫編譯器去支持就不應(yīng)該了。

但是結(jié)構(gòu)體賦值就不同了,該操作實(shí)際上就是內(nèi)存拷貝,這個(gè)在許多機(jī)器上都可以很高效的實(shí)現(xiàn)。

btw,這個(gè)問題可以看下 ISO C Rationale

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-07-19 14:44 |只看該作者
原帖由 MMMIX 于 2008-7-19 14:40 發(fā)表

其實(shí)最真實(shí)的原因是無法對結(jié)構(gòu)體比較提供高效的實(shí)現(xiàn)。在 C 中,結(jié)構(gòu)體可能有填充位,這些填充位的值是未定義的,因此結(jié)構(gòu)體的比較就只能是逐個(gè)比較其成員,而這種比較方式的效率是很低的(例如碰到很大的結(jié)構(gòu)體 ...

多謝LD,真是高手。
也就是說,由于賦值可以用memcpy等函數(shù)實(shí)現(xiàn),但是比較卻不能用memcmp等函數(shù)實(shí)現(xiàn)。
所以,NNGX,費(fèi)力不討好,干脆就不實(shí)現(xiàn)了~~~

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-07-19 14:52 |只看該作者
可以考慮將 == 重載,或者寫一個(gè)比較函數(shù),在比較很多的情況下,可以省事:wink:

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-07-19 15:19 |只看該作者

回復(fù) #8 sun20082002 的帖子

C++就是那么重載的,可是C不行

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-07-19 15:28 |只看該作者

回復(fù) #9 prolj 的帖子

c的不熟悉了.原來如此,那讓我碰到c的,寫一個(gè)比較用途的全局函數(shù),就ok了吧?
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP