|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)教個(gè)c語言的問題(一個(gè)面試題) |
| 作者:northerns 欄目:單片機(jī) |
一下程序有什么錯(cuò)誤,怎么改正? unsigned CHAR *func() { unsigned CHAR i=0; ++i; return &i; } |
| 2樓: | >>參與討論 |
| 作者: lanmp 于 2006/7/14 17:28:00 發(fā)布:
臨時(shí)變量不能通過這種方式傳遞的指針進(jìn)行調(diào)用 去看那個(gè) 高效C編程 |
|
| 3樓: | >>參與討論 |
| 作者: 平常人 于 2006/7/14 17:38:00 發(fā)布:
函數(shù)返回后臨時(shí)變量消失,返回的指針也無意義了! 另一個(gè)要點(diǎn)是,++i很可能被編譯器優(yōu)化掉,在函數(shù)返回前等同于i=1;這樣分析下去,編譯器中的優(yōu)化器就要被搞暈了,“如何返回一個(gè)指針指向一個(gè)常數(shù)1呢?” 所以,這個(gè)函數(shù)的另一個(gè)結(jié)局是,你得到了一個(gè)指向一個(gè)常數(shù)1的指針! 我被搞暈啦!~~~~ |
|
| 4樓: | >>參與討論 |
| 作者: Lgend 于 2006/7/14 18:22:00 發(fā)布:
哈哈 樓上的說得很有意思啊 |
|
| 5樓: | >>參與討論 |
| 作者: xfliu0224 于 2006/7/14 18:34:00 發(fā)布:
同意平常人的看法 |
|
| 6樓: | >>參與討論 |
| 作者: computer00 于 2006/7/14 18:45:00 發(fā)布:
這樣的程序很難說是哪里出了錯(cuò)誤。 例如,我可能寫這樣一個(gè)程序,目的是為了看看臨時(shí)變量i的地址到底分配在哪個(gè)地址了。通過函數(shù)返回,再打印出來,就可以看到了。 沒有說明程序的目的,我們就不好指出錯(cuò)誤。如果要說錯(cuò)誤的話,我也可以說++i錯(cuò)了,因?yàn)槲覀兊哪康氖且?-i…………………… |
|
| 7樓: | >>參與討論 |
| 作者: HWM 于 2006/7/14 19:55:00 發(fā)布:
按樓上的說法就不可能出現(xiàn)任何錯(cuò)誤,因?yàn)槲业哪康木褪亲屗鲥e(cuò). |
|
| 8樓: | >>參與討論 |
| 作者: computer00 于 2006/7/14 20:23:00 發(fā)布:
也可以這么說,你說我想試試這個(gè)編譯器對(duì)這條語句會(huì)不會(huì)報(bào)錯(cuò) 在測試編譯器的時(shí)候,沒準(zhǔn)就有人這么做過。 但是這個(gè)還是有目的的。語法錯(cuò)誤可以指出來。但是邏輯錯(cuò)誤或者思維錯(cuò)誤,不給出目的的話,叫人家怎么指出? |
|
| 9樓: | >>參與討論 |
| 作者: xc_cz 于 2006/7/14 20:36:00 發(fā)布:
我覺得應(yīng)該是這樣 unsigned CHAR func() { unsigned CHAR *i=0; ++i; return &i; } |
|
| 10樓: | >>參與討論 |
| 作者: IceAge 于 2006/7/14 20:44:00 發(fā)布:
static unsigned CHAR i=0; |
|
| 11樓: | >>參與討論 |
| 作者: leixiaow 于 2006/7/14 23:13:00 發(fā)布:
關(guān)注中 |
|
| 12樓: | >>參與討論 |
| 作者: xysl 于 2006/7/15 14:23:00 發(fā)布:
個(gè)人愚見:) unsigned CHAR *func() { unsigned CHAR i=0; ++i; return &i; } 1:這個(gè)函數(shù)有用嗎?反回值是好多.理論上每次返回都="1",有用嗎? 2:一般來說,用到指針返回的函數(shù)還是少,最少我用得很少,這樣寫有意思嗎? 3:語法上應(yīng)該沒得什么錯(cuò)誤,不過要看什么編譯器 Build target 'Target 1' compiling main.c... linking... Program Size: data=12.0 xdata=0 code=109 "TEST" - 0 Error(s), 0 Warning(s). 這是在keil C51上編譯的 Clean: Deleting intermediary and OUTPUT files. Clean: Deleted file "D:\e\program\pic\wsTEST060708\main.obj". Clean: Deleted file "D:\e\program\pic\wsTEST060708\main.cce". Clean: Deleted file "D:\e\program\pic\wsTEST060708\wsTEST.lde". Clean: Deleted file "wsTEST.cof". Clean: Deleted file "D:\e\program\pic\wsTEST060708\wsTEST.mcs". Clean: Done. Executing: "C:\HT-PIC\BIN\PICC.EXE" -C -E"main.cce" "main.c" -O"main.obj" -Q -MPLAB -16F73 Compiler operating in DEMO mode. Some command LINE options are disabled and compilation is delayed. Register this compiler to enable these options. Warning[000] D:\e\program\pic\wsTEST060708\main.c 66 : pointer to non-static object returned Executing: "C:\HT-PIC\BIN\PICC.EXE" -E"wsTEST.lde" "D:\e\program\pic\wsTEST060708\main.obj" -Q -MPLAB -16F73 -O"wsTEST.cof" Compiler operating in DEMO mode. Some command LINE options are disabled and compilation is delayed. Register this compiler to enable these options. MEMORY Usage Map: Program ROM $0000 - $0051 $0052 ( 82) words Program ROM $02AA - $07FF $0556 ( 1366) words $05A8 ( 1448) words total Program ROM Bank 0 RAM $0020 - $0048 $0029 ( 41) bytes Bank 0 RAM $007F - $007F $0001 ( 1) bytes $002A ( 42) bytes total Bank 0 RAM Bank 1 RAM $00FF - $00FF $0001 ( 1) bytes total Bank 1 RAM Program statistics: Total ROM used 1448 words (35.4%) Total RAM used 43 bytes (22.4%) Loaded D:\e\program\pic\wsTEST060708\wsTEST.cof BUILD SUCCEEDED: Sat Jul 15 14:32:39 2006 這是在mplab上picc 8.02的結(jié)果。不過這些與標(biāo)準(zhǔn)的C編譯器都有一些不一樣的地方。 但最少語法沒錯(cuò)。 4:unsigned CHAR *func(void) 從規(guī)范上應(yīng)該是這樣的。 |
|
| 13樓: | >>參與討論 |
| 作者: tonydesign 于 2006/7/15 19:30:00 發(fā)布:
有收獲了 多看看還是好的。 |
|
| 14樓: | >>參與討論 |
| 作者: nfs270 于 2006/7/16 13:16:00 發(fā)布:
了解 看來這里有不少高手啊,受教了,以后還要好好學(xué)C啊!還是比較管用的! |
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |