編譯器確定
❶ 在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} }
(1)編譯器確定擴展閱讀:
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函數逐個對數組元素賦值。
參考資料來源:網路-二維數組
網路-數組
❷ 編譯器如何確定源代碼的有效性
編譯器使用詞法分析、語法分析和語義分析三個程序功能模塊檢驗源程序是否符合相關規則,符合無錯就認為是有效的。
編譯器使用目標代碼生成程序功能模塊生成目標代碼,生成過程依據語法分析生成的語法樹和語義檢查及轉換規則,保證生成的目標代碼與源程序的演算法功能等價。
目標文件與源程序演算法功能是等價的,當然具有你說的演算法特性。演算法依靠指令的選用、指令的順序及存儲空間的使用來實現。沒有順序就沒有演算法。
❸ 請問編程語法規則,是不是根據不同編譯器來定的
不,一個語言的語法是早就確定好的,它有一個統一標准——例如 ANSI C。
不同編譯器可能有些許不同,比如有的編譯器a=b=c結果很可能不一樣(所以我們很少這么用
但是大體上,一個語言的編譯器得出的結果是一樣的,是根據語法規則做出編譯器而非編譯器確定語法規則。
zhengshu a=0,編譯器肯定不認,理由是沒有這個type;但是你可以通過typedef自定義任意的類型。
int是一種type,而type varlist;是聲明變數的語法(int a; char b;)
你寫了int a=0;那麼這時編譯器做的就是在內存中開出一個能存int數據的空間,然後把0給填進去,再記錄下這塊內存的地址,並記住這個地址叫做a。至於分析代碼什麼的,就是編譯器的事情了。
——以上。