看下面一段代码:

struct test {

int body1:1;

int body2:2;

};

这里提出的问题是,结构体里面的冒号的作用是什么。这种冒号的用法不是我随便杜撰的,而是在实际的代码里面看到的。

在C++的函数定义时,参数列表之后可以使用冒号来给变量赋值,这里的冒号是不是也起着给结构体成员赋默认值的作用呢?是与不是,通过测试来揭晓。

首先,我写了一个测试驱动函数test来专门进行测试,如下:

void test()

{

structtest struction;

printf("body1:%d; body2:%d\n", struction.body1,struction.body2);

}

在定义结构体变量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语言以冒号分割字符串,C语言里面的冒号相关推荐

  1. c语言以空格分割字符串_C语言: 利用sscanf() 函数分割字符串

    头文件:#include sscanf()函数用于从字符串中读取指定格式的数据,其原型如下: int sscanf (char *str, char * format [, argument, ... ...

  2. c语言以空格分割字符串_C语言strtok()函数:用指定的分隔符分解字符串

    函数名: strtok 头文件: 函数原型: char *strtok(char *str1, const char *str2); 功能: 用指定的分隔符分解字符串 参数:   char *str1 ...

  3. c语言以空格分割字符串,C语言程序要读入一行文本,以空格分隔若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。...

    对于每个英文字母分别判断个数,并累计,最终输出即可.一.算法:1.循环读取字符,直到换行为止.对于每个字符,执行以下流程.2.判断是否为英文字母,即小写和大写两种.3.如果是英文字母,则统计个数.输入 ...

  4. C语言按子串分割字符串

    C语言按子串分割字符串 一.按字符分割字符串 C语言提供了一个按字符分割字符串的库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组 ...

  5. 分割字符串c语言strsep,C语言 字符串切割

    #include #include #include /* 字符串切割函数 */ /* 知识补充: 1. 函数原型: char *strtok(char *str, const char *delim ...

  6. c语言数组取出特定字符串,C语言根据特定的符号分割字符串 如:字符串a,bbb,ccc-数组[a,bbb,ccc]...

    //根据符号','分割字符串,例如:字符串"a,bbb,ccc"->数组[a,bbb,ccc] author:wangchangshuai jlu char** splitF ...

  7. c语言将字母存入字符串,C语言把资料读入字符串以及将字符串写入文件

    C语言把文件读入字符串以及将字符串写入文件 1.纯C实现 FILE *fp; if ((fp = fopen("example.txt", "rb")) == ...

  8. c语言插入特定的字符串,C语言实现:将一个字符串插入到另一个字符串的指定位置...

    C语言实现:将一个字符串插入到另一个字符串的指定位置 发布时间:2018-08-22 13:23, 浏览次数:1672 示例一: char *insert(char *s1, char *s2, in ...

  9. c 语言比较三个字符串,C语言字符篇(三)字符串比较函数

    C语言字符篇(三)字符串比较函数 #include int strcmp(const char *s1, const char *s2);    比较字符串s1和s2 int strncmp(cons ...

最新文章

  1. 【 FPGA 】UltraFast设计方法学:时序收敛之时序约束基本准则
  2. JavaWeb中post提交乱码之编码拦截器Filter
  3. Spark对Kafka两种连接方式的对比——Receiver和Direct
  4. windows文件中的中文在ubuntu下乱码(小弟参考了许多都不行,这个绝对行啊) .
  5. Python操作Kafka爬坑
  6. GIL线程全局锁 协程
  7. pyqt5 qscrollarea到达_PyQt5如何用QPainter在QScrollArea上画线?
  8. 华为高管预告手机鸿蒙OS下月上线,华为手机部:我们没说过
  9. linux提示有新邮件,/var/spool/mail/root 中有新邮件 解决方法
  10. oracle数据库考试答题,Oracle数据库试题
  11. 博客V7之后,喜庆排名进入2000之内
  12. oracle的采购管理模块,ORACLEERP采购管理模块操作手册
  13. 优车车欲用Uber模式和传统驾校一起打一场漂亮仗
  14. “21天好习惯“ 第四期 — 4
  15. nifi mysql hive_Nifi入门
  16. 2 spss 统计绘图与线性回归
  17. 强推!阿里数据科学家一次讲透数据中台
  18. Shell中的expr命令
  19. hdu 1069 Monkey and Banana 【动态规划】
  20. Edge浏览器固定到任务栏的网页图标显示透明

热门文章

  1. Thymeleaf文档
  2. 超详细百家大厂面试资料,免费送!
  3. 用华为鸿蒙 OS 2.0 系统写出了HelloWorld!那些说鸿蒙是PPT的可以闭嘴了!
  4. java 多线程下载器_Java多线程的下载器(1)
  5. C语言实现录入学生信息并按分数排序输出
  6. AngularJS相关网站存档
  7. php文件手机怎么解压,linux 怎么解压文件
  8. java中的乐活锁_(转)[乐活]别抱怨了,Shit happens!
  9. catia目录编辑器使用教程_如何去编辑数学公式?公式编辑器使用教程
  10. 面试官:你说一下Redis使用场景都有哪些