編譯函數存儲順序
代碼區是獨立的一個區,不屬於棧區
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其
操作方式類似於數據結構中的棧。
2、堆區(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回
收 。注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。
3、全局區(靜態區)(static)—,全局變數和靜態變數的存儲是放在一塊的,初始化的
全局變數和靜態變數在一塊區域, 未初始化的全局變數和未初始化的靜態變數在相鄰的另
一塊區域。 - 程序結束後由系統釋放。
4、文字常量區 —常量字元串就是放在這里的。 程序結束後由系統釋放
5、程序代碼區—存放函數體的二進制代碼。
『貳』 c語言裡面的函數分先後嗎
函數要先聲明後才能調用,聲明分為兩種如下:
先聲明後定義:
void b();
void a()
{
b();
}
void b()
{
}
聲明和定義在一個地方:
void b()
{
}
void a()
{
b(); //這樣才能滿足先聲明後調用
}
你編譯錯誤的原因應該是這樣:
void a()
{
b(); //此時b還沒有聲明
}
void b()
{
};
『叄』 如何在編譯main函數之後順序編譯其餘cpp文件
在VS2010中的C++模塊,我寫了如下程序(簡單還原):
第一步: 設定constant.cpp文件,用來定義一些全局變數和自定義函數;
第二步: 設定headline.h文件,用來聲明在constant.cpp中定義的全局變數和自定義函數,同時定義了一些宏(類如PI);
第三步: 設定main.cpp文件,作為整個項目的主函數——int main();
第四步: 設定initial.cpp文件,作為整個項目的次函數1——void main();
第五步: 設定force.cpp文件,作為整個項目的次函數2——void force();
第六步: 設定integrate.cpp文件,作為整個項目的次函數3——void integrate();
『肆』 在C語言中,二維數組元素在內存中的存放順序是 A按行存放 B按列存放 C由用戶自己定義 D由編譯器決定
c語言中,二維數組元素在內存中是按行存放的。
二維數組本質上是以數組作為數組元素的數組,即「數組的數組」,類型說明符 數組名[常量表達式][常量表達式]。二維數組在概念上是二維的,即是說其下標在兩個方向上變化, 下標變數在數組中的位置也處於一個平面之中, 而不是象一維數組只是一個向量。
但是,實際的硬體存儲器卻是連續編址的, 也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數組,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。另一種是按列排列, 即放完一列之後再順次放入第二列。在C語言中,二維數組是按行排列的。
例如:float a[3][4],b[5][10]; 定義a為3*4(3行4列)的數組,b為5*10(5行10列)的數組。注意,不能寫成 float a[3,4],b[5,10]; 具體可以表示:a[3][4]={ {1,2,3,4},{5,6,7,8},{9,10,11,12} }
(4)編譯函數存儲順序擴展閱讀:
1、表示方法:
數組元素也是一種變數, 其標識方法為數組名後跟一個下標。下標表示了元素在數組中的順序號。數組元素的一般形式為:數組名[下標] 其中的下標只能為整型常量或整型表達式。如為小數時,C編譯將自動取整。例如,a[5],a[i+j],a[i++]都是合法的數組元素。數組元素通常也稱為下標變數。必須先定義數組, 才能使用下標變數。
2、賦值方法:
初始化賦值的一般形式為:static類型說明符數組名[常量表達式]={值,值……值}; 其中static表示是靜態存儲類型, C語言規定只有靜態存儲數組和外部存儲數組才可作初始化賦值。在{ }中的各數據值即為各元素的初值, 各值之間用逗號間隔。例如:static int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相當於a[0]=0;a[1]=1...a[9]=9;
3、使用規則:
一、數組的類型實際上是指數組元素的取值類型。對於同一個數組,其所有元素的數據類型都是相同的。
二、數組名的書寫規則應符合標識符的書寫規定。
三、數組名不能與其它變數名相同。
四、可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
五、只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;(請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。)
六、若不給可初始化的數組賦初值,則全部元素均為0值。
七、假如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5}; 可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
參考資料來源:網路-二維數組
網路-數組
『伍』 C或C++程序編譯時內存分為哪5個存儲區呢
我想很多人也是糊塗,以下文章寫得很好,故全文轉來,慢慢體會。 程序的內存分配(堆和棧區別) 一、預備知識 程序的內存分配 一個由c/C++編譯的程序佔用的內存分為以下幾個部分 1、棧區(stack) 由編譯器自動分配釋放 ,存放函數的參數值,局...
『陸』 函數編譯後屬於哪個段是代碼段還是棧中求解答
函數編譯完後,肯定是在代碼段。而變數根據是否初始化等,會有區別
『柒』 keil編譯後函數在單片機的存儲地址和什麼有關系
沒有關系。
首先:每一個內存地址如0x01H、0x00H、0x03H,代表的某一個內存塊,而單片機中最小存儲單位就是一個位元組,即單片機以位元組為單位進行存儲,所以0x00H這個地址代表了一個位元組,即1Byte,這一個位元組中包含有8個數據位,即1Byte=8bit。
存儲器分為程序存儲器ROM和數據存儲器RAM,兩種又都可以分為片內和片外,片外即需要自己在單片機外部擴展。
『捌』 C++編譯時,是從哪一個cpp開始的,然後各cpp的編譯順序是如何定的
所有的C程序都是從main函數開始的(當然,如果main函數上邊還有全局變數等等還會從他們開始執行),而你所說的編譯順序說白了,就是程序中的頭文件在代碼中放置的順序和嵌套的順序……
你只看包含有main函數的.cpp,然後把所有的頭文件展開,就自然明白了……
『玖』 請問C中編譯函數的順序
不知道你怎麼想的?
include的內容只有在程序中用到時才會被編譯;
在使用main()的C程序中,沒有判斷和轉折語句外,其它函數都是順序執行。
現在都用C++,面向對象了。順序指令只用於單任務系統。
『拾』 C語言 子函數和主函數的放置前後順序區別
先回答下第一個問題,子函數的實現方法可以放在使用它的主函數或者其它子函數後面,但是你的定義一定要在使用它之前;不然編譯器怎麼知道你用的函數square是什麼,這就是我們經常包含頭文件的一個目的,頭文件是一些函數定義或者預編譯命令。
修改是在#include<stdio.h>後面加
int square(int num);
第二個問題:num是在main定義是可以在main作用域內直接使用,或者當做參數傳遞給子函數,你的問題num為什麼可以在子函數中用,首先你子函數的num並非main里的num只是你把他們名字寫成一樣了;main里num是通過值傳遞給子函數的num,實際他們兩個num的內存地址是不一樣的,你子函數換個名字去理解一下。