1.求輸出結果
int a[2][2][3]= ,},,}};
int *ptr=(int *)(&a+1);
printf(「%d %d」, *(int*)(a+1), *(ptr-1));
答案:7 12
1. &a+i = a + i*sizeof(a);
2. a+i = a +i*sizeof(a[0]);
(int)(a+1) 指向陣列 a[2] 的第二個元素中的第乙個,也就是內部第二層大括號的第乙個元素
(ptr-1)整個陣列的最後乙個元素,因為 (int )(&a+1); 指向整個陣列的下乙個位置
2.char *p=」turbo c」的含義
p是乙個指向字串的指標變數,只能存放位址。上述語句的作用是將乙個字串常量的首位址賦給字元指標變數p。注意,是位址,位址,位址。
3.任何型別指標都可以賦值給void指標,void指標賦值給其他型別指標都要進行轉換
4.*p++ 自增p 還是 p 所指向的變數?
字尾++ 和– 操作符本質上比字首一目操作的優先順序高, 因此p++ 和(p++) 等價, 它自增p 並返回p 自增之前所指向的值。
要自增p 指向的值, 使用(*p)++, 如果***的順序無關緊要也可以使用++*p。
5.這段程式的輸出是()
void foo(int b[3])
void main()
,,};
foo(a);
printf(「%d」,a[2][1]);
}
陣列傳遞了首位址,b[0][0]指向陣列a[0][0],但是執行++b後,b[0][0]指向a[1][0],因此b[1][1]就是a[2][1],b[1][1]=9即a[2][1]=9。
1.以下錯誤的是
a.a+=(a++)
b.a+=(++a)
c.(a++)+=a
d.(++a)+=(a++)
答案:c
以整形資料為例:
++i:
int pre_increment(int &a)
函式返回的引用型別可以作為左值。
i++:
int post_increment(int &a)
函式返回的一般型別不能作為左值。
3.析構函式定義數量
只能定義乙個析構函式,多了的話編譯器不知道呼叫哪個.
1、虛析構函式和析構函式在功能上是一回事,因此除了動態聯編(此處意思:需要銷毀 父類指標指向的子類物件的空間)外,其他性質和析構函式類似。
2、析構函式與建構函式名字相同,但它前面必須加乙個波浪號(~);
3、析構函式沒有引數,也沒有返回值,而且不能過載,因此在乙個類中只能有乙個析構函式;當撤消物件時,編譯系統會自動地呼叫析構函式。
4.在函式**小,頻繁呼叫情況下適宜採用內聯函式。
如果內聯函式體非常短,編譯器為這個函式體生成的**就會真的比為函式呼叫生成的**要小許多。將會確實帶來更小的目標**和更高的快取命中率
1.負數的儲存形式
c語言中變數以補碼形式存放在記憶體中,正數的補碼與原碼相同,負數求補碼方式為(符號位不變,其餘各位取反,最後末尾加1);
shotr y = -9,負數,原碼:1000 1001,補碼:1111 0111,擴充套件到16位高位補1,結果為fff7h;
2.左值和右值
c/c++語言中可以放在賦值符號左邊的變數,即具有對應的可以由使用者訪問的儲存單元,並且能夠由使用者去改變其值的量。左值表示儲存在計算機記憶體的物件,而不是常量或計算的結果。或者說左值是代表乙個記憶體位址值,並且通過這個記憶體位址,就可以對記憶體進行讀並且寫(主要是能寫)操作;這也就是為什麼左值可以被賦值的原因了。相對應的還有右值:當乙個符號或者常量放在操作符右邊的時候,計算機就讀取他們的「右值」,也就是其代表的真實值。右值指的是引用了乙個儲存在某個記憶體位址裡的資料。
簡單來說就是,左值相當於位址值,右值相當於資料值。
1.轉義字串,第一部分是乙個&符號,英文叫ampersand;第二部分是實體(entity)名字或者是#加上實體(entity)編號;第三部分是乙個分號。
比如,要顯示小於號(<),就可以寫 < 或者 < ,用實體(entity)名字的好處是比較好理解,一看lt,大概就猜出是less than的意思。
C C 題庫整理(四)
明明想在學校中請一些同學一起做一項問卷調查,為了實驗的客觀性,他先用計算機生成了n個1到1000之間的隨機整數 n 1000 對於其中重複的數字,只保留乙個,把其餘相同的數去掉,不同的數對應著不同的學生的學號。然後再把這些數從小到大排序,按照排好的順序去找同學做調查。請你協助明明完成 去重 與 排序...
C語言題庫 指標
1.請問下面的 定義了什麼 int funcs 4 int int,int int,int int,int 分析 這是一行定義語句,c語言最難理解的便是其花樣繁多的宣告 定義。理解宣告 定義語句的關鍵是抓住一條 c語言像呼叫一樣宣告變數,從變數名 函式本身也是變數,代表一段 邏輯 記憶體 出發,看變...
Leetcode題庫 移除元素(java語言版)
題目描述 給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2...