2016-01-04 48 views
0

我有結構的2維數組,像這樣:在C中設置2d數組的起始內存地址?

struct foo { 
    int bar; 
    float baz; 
}; 

實際上,我瞭解操作系統的開發,現在,有一件事我想要做的是產生這些結構的二維陣列尺寸的80x25:

struct foo foobar[80][25]; 

雖然我需要的顯存開始的地方將其設置爲地址0xb8000,因爲這是。有什麼辦法可以指定我的數組在哪裏開始的地址?

到目前爲止,我已經試着這樣做:

struct foo foobar[80][25]; 
*foobar = (struct foo) 0xb8000; 

但是,這是行不通的。編輯:也正在做這樣的法律和/或可能的C99標準?

+0

'foo =(struct foo *)0xb8000;' – stackptr

+0

@kaylum良好的捕獲,現在將編輯,謝謝:) – mosmo

回答

1

你不能在特定位置聲明數組,但你可以用一個指針:

struct foo *x; 
x = (struct foo*)0xb8000; 

這應該工作,但可能是操作系統會抱怨,如果你試圖從一個正常的程序,除非是DOS或類似的東西。

+0

請記住,OP想要作爲二維數組訪問變量。你的解決方案是否允許? – kaylum

+0

嗯,好吧。我該如何去做與指針相當的x [10] [15]? 'x [10 + 15 * buffer_width];'? – mosmo

+0

數組事情根本無法完成,除非您的編譯器/鏈接器提供了非標準的方式。 –