C語言中變數定義為near,c語言怎麼定義字串變數啊?

時間 2022-08-19 07:42:24

1樓:匿名使用者

這是歷史遺留問題,dos系統執行於intel的8086/8088這個16位cpu,但這cpu有20條位址匯流排,16位的暫存器就無法直接定址20位的位址,於是搞出來乙個段偏移的概念,把1m的記憶體空間按64k分段, 以段位址+偏移位址的方式實現20位位址。cpu有許多預先設計好的段暫存器,程式執行的時候,存放在資料段暫存器(ds)中的段位址被當作乙個預設的段位址,這64k空間就被稱為近程空間(near)。既然有近程空間,那麼就有遠端空間:

位於ds段以外的位址空間就叫遠端空間(far)。如果不顯式宣告,預設使用近程空間

unsigned char near variable; //在近程空間(ds段)建立乙個變數 variable

unsigned char varible ; //沒有顯式宣告,同樣是near變數

對於unix/linux/windows這些32位作業系統,對記憶體的操作是線性的,也就沒有near和far的區別了

關於16位段記憶體的詳細內容,你可以參考8086/8088組合語言以及16位的c語言系統手冊(比如turbo c的程式設計師手冊)

2樓:匿名使用者

這個與c語言的功能無關, 只是基於硬體特性.

微控制器中, 因為指令長度及資料長度的cpu操作限制, 對於ram/rom位置的操作, 有些會區分 變數 距離 操作指令 其兩者之間的距離.

當距離較近, 也許單一指令就能訪問, flash小, 且速度快.

當距離較遠, 會採取多指令組合, 或是佔時較久的操作指令來處理.

這個依照硬體特性不同而採用.

ps. 以上是個人印象, 如有訛誤歡迎指正.

函式或變數前加far或者near是什麼意思

3樓:金色潛鳥

這是老式 8086 晶元用過的東西,有些來自改寫老程式來的程式,留下了far或者near,把它看成 「空」 即可。

8086 老程式 變數和函式位址 由2部分組成: 有 乙個 16-bit 的 「segment value」和 乙個 16-bit 的 偏移量「offset」

可以定義在 本「段」,也可定義在 遠的「段」。

加 near,就在 本「段」,近處。用 offset 就可以了。

加far, 就在遠處,定址時要加上 段的偏移量。老式機 每64k 就是乙個段,很可憐的 。

c語言怎麼定義字串變數啊?

4樓:匿名使用者

c沒有字串定義,字串是拆開放入char陣列裡面的

5樓:戚文柏

char *buffer; //使用指標最好.

buffer = (char*)malloc(1024);

strcpy( buffer, "1234567890" );

free( buffer );

buffer = null;

6樓:小斬

字元陣列

求採納為滿意回答。

7樓:菜鳥學c加加

#include

#include

#include

int main()

;char *pstr1 = str1;

char *pstr2 = (char*)malloc(15);

strcpy(pstr2, str2);

printf("str1=%s\n", str1);

printf("str2=%s\n", str2);

printf("pstr1=%s\n", pstr1);

printf("pstr1=%s\n", pstr1);

return 0;

}這些應該都行。

8樓:至

char a=;

c語言中對乙個定義乙個變數就是為其在記憶體中分配乙個空間,那個空間最開始從哪分配起呢?

9樓:匿名使用者

分配記憶體,是指在記憶體中找個地方給這個變數,在邏輯空間上同一型別的變數是在一起的。

但是,我們現在的系統都是分頁分段管理的,所以會出現了邏輯位址和實體地址兩個概念。

邏輯位址,對於每個程式都是一樣的,變數在一起、常量又在另外的地方,還有**段、資料段等。

實體地址,就是實實在在的記憶體(也可能是硬碟)了,程式的資料究竟放在那塊記憶體由作業系統決定。

10樓:超人小笨蛋

c語言中的記憶體分配從地位址到高位址依次分為程式位址區域、文字常量位址區域、全域性變數位址區域、空閒區域(堆)位址區域、棧位址區域、作業系統位址區域。細說那就說來話長了,你可以找找講c的書,裡面一般會講儲存管理。

簡而言之,

一:像全域性變數、靜態變數這些能在編譯時就能確定其記憶體空間的變數,就採用靜態儲存分配分配到全域性變數位址區域;

二:棧式儲存分配,編譯器在編譯時僅知道程式變數所需空間,到執行時才為其分配位址的,就分配到棧位址區域;

三:堆式儲存分配,堆由大片可利用塊或空閒塊組成,堆中的記憶體可以按任意順序分配和釋放。在程式編譯無法確定資料塊大小時(如可變長度的字串),可在堆中分配記憶體空間;c語言在執行時進行的動態記憶體分配都是在堆中進行的

在c語言中,用typedef重新命名後,原來的變數名還可以用嗎

11樓:風若遠去何人留

可以使用的。

typedef相當於給原本的型別起了乙個「別名」。

比如typedef unsigned char u8;

這樣用到u8的地方,就和直接使用unsigned char 相同了。

但是這只是給unsigned char增加了乙個新的名字,並不是改名,原本的unsigned char還是可以繼續用的。

不過,在同乙個專案中,如果已經定義了新名字,就盡量不要使用原本的名字了,給**的閱讀和維護會帶來麻煩。

12樓:風清響

首先,typedef int integer 不是 將int定義為integer,而是定義了乙個int型別的型別,名字叫integer。所以int顯然可以使用

13樓:匿名使用者

可以,typedef定義的是新型別,不是變數,用來定義的原有的型別不會消失

14樓:匿名使用者

用typedef定義型別本來就是為了自己在程式中使用方便,如果你還要用程式原來的定義語句,又何必要用typedef定義自己的型別

15樓:匿名使用者

typedef是用來定義型別的,而不是用來定義變數的。而且它的含義是起別名,原來的名字是不會失效的。typedef是一種定義抽象型別的輕量級方法,比如你建立鍊錶,元素的型別你如果定義成int,那麼以後改成double的時候就要每個地方都改,但如果你事先用typedef定義了乙個element型別,那麼想修改成double的時候,就只用修改typedef就可以了。

當然,typedef出來的別名只在你需要這個抽象型別的地方使用就行了,比如你給int定義成了element型別,你定義迴圈計數器的時候難道還要用element i = 0; 麼,顯然用int就行了。

16樓:西瓜皮上的螞蟻

可以typedef 相當於 別稱

C語言中對定義變數就是為其在記憶體中分配空間,那個

分配記憶體,是指在記憶體中找個地方給這個變數,在邏輯空間上同一型別的變數是在一起的。但是,我們現在的系統都是分頁分段管理的,所以會出現了邏輯位址和實體地址兩個概念。邏輯位址,對於每個程式都是一樣的,變數在一起 常量又在另外的地方,還有 段 資料段等。實體地址,就是實實在在的記憶體 也可能是硬碟 了,...

C語言中變數儲存型別有哪些,C語言中變數的儲存型別有哪幾種,儲存方式哪幾種?謝嘍

自動 靜態 寄存 易失 一說是自動 auto 靜態 static 暫存器的 register 和外部的 extern 然而某認為extern是用來對編譯器進行宣告變數的,而不是定義。自動,靜態,外部,寄存在函式體內宣告的變數在預設情況下都是auto儲存型別 在 塊之間傳遞資訊的一種方法就是使用外部變...

變數定義說明C語言

不會影響的!以下給出了他們的區別和聯絡!授人以魚不若授人以漁,希望能幫到你!變數的定義 所謂的定義就是 編譯器 建立乙個物件,為這個物件分配一塊記憶體並給它 取上乙個名字,這個名字就是我們經常所說的變數名或物件名。但注意,這個名字一旦和這塊記憶體匹配起來 可以想象是這個名字嫁給了這塊空間,沒有要彩禮...

C語言中如何定義字串,c語言中,怎麼樣定義乙個字串變數

可以通過字元陣列或字元指標來定義字串,也可以用巨集定義對常量字串進行定義。下面通過舉例來分別進行說明 char str1 helloworld 通過字元陣列來定義字串 helloworld 陣列中每個儲存單元存放乙個字元 char str2 helloworld 通過字元指標來定義字串 hellow...

關於c語言中指標變數的問題,關於C語言中指標變數的問題

int a 15,b 99,c 22,d 45 a 15,b 99,c 22,d 45 int p a 變數p指向變數a,p指向的單元的內容 p 是15 int q b 變數q指向變數b,q指向的單元的內容 q 是99 p c 給p指向的單元賦值,而不是給p賦值,由於p指向變數a的單元,則相當於給a...