-
c中的記憶體儲存分為靜態儲存區、堆疊區、堆區和**區。
程式中有全域性變數、靜態變數等的靜態儲存,這些記憶在程式的持續時間內持續存在。
程式中的自動變數存在於堆疊中,這些變數在函式進入和返回時在堆疊中動態建立和清除。
使用者在程式中用 malloc 等請求的內存在堆中,必須由使用者顯式釋放(當然,在程式結束時也會自動釋放)。
變數的值儲存在變數儲存中,例如,你有 int a=3; 假設這是乙個全域性變數,在程式的靜態儲存中具有 4 個位元組的記憶體,4b 記憶體的狀態是它的值。
C 不儲存變數名,編譯器最終會使用記憶體位址來操作變數記憶體,只有一些編譯器在除錯時會把變數名資訊放到可執行程式中,因為這不是 C 標準的內容,所以不同的編譯器有不同的實現,查閱編譯器手冊或許能得到一些資訊。
C++預設不儲存變數型別,RTTI目前在C++中非常有限,標準只在原始碼級別控制,具體實現由編譯器廠商完成,例如,乙個類的型別資訊,它屬於這個類,而不是類的例項, 所以如果要儲存這個類的型別資訊,可以把型別資訊放在程式的靜態儲存區域,然後在類中再安排乙個指標指向那裡,這樣每個例項在執行時都能得到它的型別資訊。
-
因此,int 是編譯器自動識別的此問題的內建型別。
a 是乙個整數,編譯器將此變數放在記錄堆疊上變數型別的符號表上。
3 是乙個常量,不在堆疊中,而是在賦值後儲存在 A 的堆疊空間中。
差不多就是這樣。
編譯器將自行處理特定問題。
-
sizeof(a)可以看出它應該是4位,在Windows 256*256*sizeof(a)下是A的大小,儲存是直接儲存的,應該有乙個更低的8位。
-
矩陣為:
for(j=0;j 如果 for(j=0; j<=i;j++)原來是 19。
-
親愛的,如果你不知道這些問題,把它帶到編譯器並執行它,答案是毋庸置疑的!!
正確答案是 14
-
A是變數名,可以理解a-3指標應該不難理解,a是開啟記憶體。
-
沒有必要為 A 騰出更多空間,該位址是 A:3
-
新手前來交流,請指教!
就好像 3 儲存在堆中一樣,在堆疊中分配了空間 a,並儲存了指向 3 的位址。
要確定兩個變數是否指向同乙個物件,您需要檢視它們是否指向同一位址。
-
A 還需要開啟空間,用於儲存指向空間 3 的位址。
-
a=3,a 的空間是 3,a 只是乙個位址。
-
==我不明白你問的問題。。。你能說得更清楚嗎?
-
main()
輸出為 6; 這裡的主要知識是陣列知識。 陣列,不管它們有多少維,在記憶體中都是一維的,可以這麼說,乙個二維陣列可以被認為是這樣乙個一維陣列,而這個一維陣列的每個元素都是一維陣列,僅此而已。 以乙個二維陣列為例,資料實際上是被 a[0][0],a[0][1],a[0][2], 壓的。
乙個[2][2]。 此外,陣列名稱也是乙個指標,指向陣列的第乙個元素,陣列括號中的數字是相對於第乙個位址的位置偏移量。 a[3]=*(a+3) 就是這個意思。
所以 p[i]=*(p+i); 也就是說,I 元素與 a[0][0] 偏移。 陣列元素按上述順序排列。 因此可以得出結論,a[1][2]是第6個元素,即5與a[0][0]偏移(a[0][0]是第乙個元素),所以a[1][2]=*(p+5); p[5]=5+1=6;所以 a[1][2]=6
如果你不明白,你可以問。
-
#include
#include
#include
#define maxlen 100
typedef int elementtype;
typedef struct
seqlist;
void initial_list(seqlist *l)
int list_length(seqlist l)
void get_element(seqlist l,int i,elementtype *x)
int list_locate(seqlist l,elementtype x)
void list_delete(seqlist *l,int i)
void sort(seqlist *l)
void insert(seqlist *l,elementtype x)
void list_cout(seqlist l)
list_cout(l1);break;
"請輸入要插入的元素";cin>>
我為你做了乙個程式,你按照你說的做了! 我除錯了程式,沒問題。
希望您滿意!
-
-60(或 -59)。
a++ 是新增的字尾,表示式中使用原始值 6,表示式遞增 1
程式分為:a=a-a*a; 這給出了 = 6-6*6 = -30
a = a+a;此步驟給出 = -30 + 30) = -60
出表示式,然後自增量 1,即 a=a+1; a = -60 + 1 = -59.
如果輸出:int a=6;
printf("%d", a+=a-=a*a++) 至 -60(原因是新增了字尾,表示式不是自遞增的1)。
如果輸出:int a=6;
a+=a-=a*a++;
printf("%d",a);獲取 -59(因為新增了字尾,並且表示式遞增了 1)。
-
本題考量你是否精通表示式的優先順序。
1. 計算自增量 1
2. 計算乘法運算。
3.計算減法。
4. 計算加法。
其結果等於:-35
-
返回 A 是 42 猜對了。
-
這個二維陣列。
它實際上是乙個具有 3 個元素的一維陣列,其中陣列的元素又是具有 3 個元素的一維陣列。
讓我們先按行優先順序重新排列它:
int a[3][3]=
C 和 C++ 中的陣列從 0 開始編號,第 1 行:a[0][0]、a[0][1]、a[0][2] 第 2 行:a[1][0]、a[2][1]、a[1][2] 第 3 行:
a[2][0],a[2][1],a[2][2],然後檢視要取的值:**中的a[1][3]? 顯然在 a[1][2] 之後,但該值已經超出了陣列的範圍(陣列有 3 個元素),即下標溢位,溢位到 **?
由於多維陣列(儲存在 C++ 中)等價於連續的一維陣列,因此此處的溢位位置正好是 a[2][0] 所在的位置。
現在我可以給你答案:a[1][3]=7
-
我不知道,因為a[0][0]表示第一行的第一列,a[0][1]表示第一行的第二列。
a[1][0] 表示第二行的第一列,a[1][3] 代表第二行的第四列,這個陣列是 3 行 3 列,所以不知道 a[1][3] 等於多少,它沒有定義。
-
7a[3][3] 是 3 行 3 列。
a[1][3] 是第 2 行的第 4 列(因為陣列的下標從 0 開始),但陣列中沒有第 4 列,第 3 行的第一列是 7
-
這是越界的,但由於二維陣列的線性儲存性質,a[1][3] 可能是 a[2][0],即 7
我只能說也許
-
輸出值為 7完全沒問題。