C語言 C語言裡面的冒號

2021-07-05 10:49:05 字數 1214 閱讀 1550

原博:

看下面一段**:

[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...