原博:
看下面一段**:
[cpp]view plain
copy
struct
test ;
這裡提出的問題是,結構體裡面的冒號的作用是什麼。這種冒號的用法不是我隨便杜撰的,而是在實際的**裡面看到的。
在c++的函式定義時,引數列表之後可以使用冒號來給變數賦值,這裡的冒號是不是也起著給結構體成員賦預設值的作用呢?是與不是,通過測試來揭曉。
首先,我寫了乙個測試驅動函式test來專門進行測試,如下:
[cpp]view plain
copy
void
test()
在定義結構體變數struction時,我沒有給它賦值,以此來測試是不是給它的成員賦了預設值{1,2}。該函式在編譯後,執行的結果如下:
body1:0; body2:0
失望了,不是我們認為的預設賦值。
那麼修改變數的定義,給它們賦值後再列印,如:struct test struction = {1,2};
這次,程式編譯後的執行結果是:
body1:-1; body2:-2
這次的結果怎麼解釋?是不是冒號起乙個取負數的作用,後面的數字沒用?還是其它,再取幾組數字試試:
struct test struction = {1,2};
結果:body1:-1; body2:-2
struct test struction = {1,4};
結果:編譯報錯,在struct test struction = {1,2}賦值語句處:warning:overflow in implicit constant version。
居然出現了溢位,應該是在把4賦給struction.body2時溢位。這下,有結果了,冒號後面的數字表示的是數字。
據我推測,冒號在這裡的用處主要為限制使用位數:
x:num,表示x只有其最後的num個bit位有效,且在計算時是用的「補碼」表示。
如x:3,如果x賦值為7,則x值為「-1」(第三位為1,表示負數,其它位取反加1,為01,則結果為-1)。
另外,結果的正負是與變數本身的定義有關。
如x為int時,x:3,賦值為7,則實際結果為-1,若x為 unsigned int,則x:3,賦值為7時,結果為7.
C語言裡面的指標問題
一 變數與指標 1.變數 c語言中每次宣告乙個變數,則內存在會申請乙個該變數型別應該佔據的空間.假設int 型別佔四個位元組 不同系統的位元組數不同 那麼語句 int a a 10 即在記憶體中申請了四個位元組的空間,並將其命名為 a,其值為 10.2.變數位址 int型變數 a在記憶體有乙個具體的...
python呼叫C語言裡面的函式
在arm做接收dtu引數的時候,始終無法獲取到dtu對映檔案 dev dtu 裡面的資料 可能沒找到方法 剛開始用os去開啟 usr bin python coding utf 8 import os fd os.open dev dtu os.o rdwr ret os.read fd,10 pr...
C 語言 裡面的 指標 , 陣列, 位址算數
如果說,c 語言比較有特色的東西是什麼。我覺得就是,講指標,陣列,位址算數結合在了一起。當然,這也引起了一些問題,使得,c語言的程式非常的靈魂,有些時候,一些寫法對初學者還比較的 晦澀難懂。比如複製字串,可以有下面的幾種寫法。void strcpy char s,char t void strcpy...