線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1373
推到 Plurk!
推到 Facebook!

怪異的指標

缺席
yshihyu
一般會員


發表:23
回覆:18
積分:8
註冊:2006-11-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-22 09:52:03 IP:59.104.xxx.xxx 訂閱
#include
#include

int far *head = ( int far * ) 0x0000041A;
int far *tail = ( int far * ) 0x0000041C;
char far *buffer = ( char far * ) 0x0000041E;
char far *segment = ( char far * ) 0x00400000;

main ()
{
clrscr();

*( int far * )( 0x41A ) = *( int far * )( 0x41C ); /* Clear KB buffer. */
for ( ; ; )
printf ("Head : %d Tail : %d Head ---> %c Before Tail ---> %c\n", *head, *tail, *( segment *head ), ( *tail == 30 ) ? *( buffer 30 ) : *( segment *tail - 2 ) );
}


想只到下面兩段做什麼用處下面兩個市我在網路上看到的 是turbo c 編譯器 , 我想知道它這樣指標用法符合C語言標準嗎??
還是它是turbo c 編譯器才有支援這樣用法 int far *head ?? 看不懂這宣告是做什麼
int far *head = ( int far * ) 0x0000041A;
*( int far * )( 0x41A ) = *( int far * )( 0x41C );

int *far = (int *)0x0000041A; // 我改成這樣OK嗎??? 以C 標準來說?
謝謝
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-22 14:25:43 IP:218.170.xxx.xxx 訂閱
far 好古老的用法了。
那個是在 dos 年代的時候才有的。
你是寫 dos 程式嗎?

===================引 用 文 章===================
far *head = ( int far * ) 0x0000041A;
*( int far * )( 0x41A ) = *( int far * )( 0x41C );

int *far = (int *)0x0000041A; // 我改成這樣OK嗎??? 以C 標準來說?
謝謝
yshihyu
一般會員


發表:23
回覆:18
積分:8
註冊:2006-11-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-22 14:32:55 IP:59.104.xxx.xxx 訂閱
不是~~
是我在網路上看到的 .... 那現在在標準C語言中支援嗎???
還是far 是看編譯器是否有支援??
還有那指標是什麼作用 ??? 它好像直接指定記憶體位址
不過我用dev-c 好像出錯不可以直接指定記憶體位址
這是否用在嵌入式系統才有這樣的指標用法??
謝謝
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-22 19:08:10 IP:218.170.xxx.xxx 訂閱
>是我在網路上看到的 .... 那現在在標準C語言中支援嗎???
>還是far 是看編譯器是否有支援??
很久沒用到這個方式了。你可以試看看呀。

>還有那指標是什麼作用 ??? 它好像直接指定記憶體位址 >不過我用dev-c 好像出錯不可以直接指定記憶體位址
>這是否用在嵌入式系統才有這樣的指標用法??
指標都還是指標。你會錯是因為在 Windows 下面,你只能用你這個程式的記憶體。
不能用”全部”的記憶體。

jesse_chao
一般會員


發表:2
回覆:9
積分:2
註冊:2003-12-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-24 01:08:34 IP:218.168.xxx.xxx 訂閱
那是古早以前turbo C和borland C用的,是建立所謂的far heap(遠程堆積)結構用的指標,現在unix跟嵌入式也有的在用, 但是你的範例windows下百面不能跑
===========================================================================
-----------恕刪------------------------- 想只到下面兩段做什麼用處下面兩個市我在網路上看到的 是turbo c 編譯器 , 我想知道它這樣指標用法符合C語言標準嗎??
還是它是turbo c 編譯器才有支援這樣用法 int far *head ?? 看不懂這宣告是做什麼
int far *head = ( int far * ) 0x0000041A;
*( int far * )( 0x41A ) = *( int far * )( 0x41C );

int *far = (int *)0x0000041A; // 我改成這樣OK嗎??? 以C 標準來說?
謝謝
系統時間:2024-05-07 12:39:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!