c语言以冒号分割字符串,C语言里面的冒号
看下面一段代碼:
struct test {
int body1:1;
int body2:2;
};
這里提出的問(wèn)題是,結(jié)構(gòu)體里面的冒號(hào)的作用是什么。這種冒號(hào)的用法不是我隨便杜撰的,而是在實(shí)際的代碼里面看到的。
在C++的函數(shù)定義時(shí),參數(shù)列表之后可以使用冒號(hào)來(lái)給變量賦值,這里的冒號(hào)是不是也起著給結(jié)構(gòu)體成員賦默認(rèn)值的作用呢?是與不是,通過(guò)測(cè)試來(lái)揭曉。
首先,我寫(xiě)了一個(gè)測(cè)試驅(qū)動(dòng)函數(shù)test來(lái)專(zhuān)門(mén)進(jìn)行測(cè)試,如下:
void test()
{
structtest struction;
printf("body1:%d; body2:%d\n", struction.body1,struction.body2);
}
在定義結(jié)構(gòu)體變量struction時(shí),我沒(méi)有給它賦值,以此來(lái)測(cè)試是不是給它的成員賦了默認(rèn)值{1,2}。該函數(shù)在編譯后,運(yùn)行的結(jié)果如下:
body1:0;? body2:0
失望了,不是我們認(rèn)為的默認(rèn)賦值。
那么修改變量的定義,給它們賦值后再打印,如:struct test struction = {1,2};
這次,程序編譯后的運(yùn)行結(jié)果是:
body1:-1; body2:-2
這次的結(jié)果怎么解釋?是不是冒號(hào)起一個(gè)取負(fù)數(shù)的作用,后面的數(shù)字沒(méi)用?還是其它,再取幾組數(shù)字試試:
struct test struction = {1,2};
結(jié)果:body1:-1; body2:-2
struct test struction = {1,4};
結(jié)果:編譯報(bào)錯(cuò),在struct test struction = {1,2}賦值語(yǔ)句處:warning:overflow in implicit constant version。
居然出現(xiàn)了溢出,應(yīng)該是在把4賦給struction.body2時(shí)溢出。這下,有結(jié)果了,冒號(hào)后面的數(shù)字表示的是數(shù)位。
據(jù)我推測(cè),冒號(hào)在這里的用處主要為限制使用位數(shù):
x:num,表示x只有其最后的num個(gè)bit位有效,且在計(jì)算時(shí)是用的“補(bǔ)碼”表示。
如x:3,如果x賦值為7,則x值為“-1”(第三位為1,表示負(fù)數(shù),其它位取反加1,為01,則結(jié)果為-1)。
另外,結(jié)果的正負(fù)是與變量本身的定義有關(guān)。
如x為Int時(shí),x:3,賦值為7,則實(shí)際結(jié)果為-1,若x為 unsigned int,則x:3,賦值為7時(shí),結(jié)果為7.
總結(jié)
以上是生活随笔為你收集整理的c语言以冒号分割字符串,C语言里面的冒号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux gitlab 9 邮件不发送
- 下一篇: C语言程序设计双语版,双语版C程序设计(