1. strlen与sizeof差异问题:

以下程序的输出

  1. #include <stdio.h>
  2.  
  3. void main()
  4. {
  5. char * ptr="hello";
  6. char str[]="hello";
  7. printf("sizeof(pts) is %d\n", sizeof(ptr));//这里输出指针的大小
  8. printf("sizeof(str) is %d\n", sizeof(str));//这里输出整个str占用的空间大小,包含‘\0’,故输出结果为:6
  1. printf("strlen(ptr) is %d\n", strlen(ptr));//下面两个都是输出5,输出的是实际的数组或字符串的长度,不包含‘\0’
  2. printf("strlen(str) is %d\n", strlen(str));
  3. }

sizeof(pts) is 8

sizeof(str) is 6

strlen(ptr) is 5

strlen(str) is 5

2. 求一个数据是否是无符号数据

  1. template<class T>
  2. void judge_unsigned(T a)
  3. {
  4. int shift=8*sizeof(a)-1;
  5. cout<<"sizeof(a) is "<<shift+1<<endl;
  6.  
  7. if( (a|(1<<shift)) >= 0)
  8. cout<<a<<"is unsigned data"<<endl;
  9. else
  10. cout<<a<<"is signed data"<<endl;
  11. }
  12.  
  13. void main()
  14. {
  15. long long a=4;
  16.  
  17. judge_unsigned(a);
  18.  
  19. unsigned int b=4;
  20. judge_unsigned(b);
  21.  
  22. }

3. 不使用sizeof获取int。float或double所占用的字节数

使用宏定义来做

  1. template<class T>//使用模板函数实现
  2. int get_size(T *a)//这里须要传进变量的地址
  3. {
  4. return int(a+1)-int(a);
  5. }
  6. //使用宏来实现。这里将其强制转换成char*类型。除此之外,还需好在宏中对变量取地址
  7. #define GetSize(val) ( (char *)(&val+1) - (char*)(&val) )
  8.  
  9. void main()
  10. {
  11. int a[]={1,2,3};
  12. cout<<"a's size is: "<<get_size(&a)<<"define "<<GetSize(a)<<endl;
  13.  
  14. double gd=4.5;
  15. cout<<"gd's size is: "<<get_size(&gd)<<"define: "<<GetSize(gd)<<endl;
  16. }

C语言知识汇总的更多相关文章

  1. C语言知识汇总,史上最全面总结,没有之一

    C语言基础 C语言学习路线 C语言入门笔记 初识C语言 简单的C程序示例 我们编写的C代码是怎样跑起来的? 简单示例,VS2019调试C语言程序 C语言基础-数据类型 深入理解变量,变量的声明,定义, ...

  2. 最全的jQuery知识汇总

    本帖最后由 断天涯大虾 于 2016-12-26 10:22 编辑<ignore_js_op> jQuery是什么? jQuery是javascript编写一个可重用的JavaScript ...

  3. [转]【eoeAndroid索引】史上最牛最全android开发知识汇总

    一.开发环境搭建 (已完成) 负责人:kris 状态:已完成 所整理标签为:搭建 SDK JDK NDK Eclipse ADT 模拟器 AVD 调试器(DEBUG) DDMS 测试 日志 Logca ...

  4. JSP知识汇总

    JSP知识汇总 一.简介 > HTML - HTML擅长显示一个静态的网页,但是不能调用Java程序. > Servlet - Servlet擅长调用Java程序和后台进行交互,但是它不擅 ...

  5. Java快速入门-03-小知识汇总篇(全)

    Java快速入门-03-小知识汇总篇(全) 前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下 快键键 常用快捷键(熟记) 快捷键 快捷键作用 ...

  6. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  7. 谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解(转载)

    相关参考文章: 谈谈自己对REST.SOA.SOAP.RPC.ICE.ESB.BPM知识汇总及理解 微服务SOA架构与RPC远程过程调用 SOA和微服务架构的区别 SOA: 维基百科解释:SOA:面向 ...

  8. web前端project师知识汇总

    分类: Web开发应用  一.何为Web前端project师?           前端project师,也叫Web前端开发project师.他是随着web发展.细分出来的行业.Web前端开发proj ...

  9. javascript常用知识汇总

    javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这 ...

随机推荐

  1. SE 2014年4月14日

    一. 概述BGP的特点 BGP协议是一种距离矢量协议,基于TCP的179端口,BGP协议不会动态的学习路由,只能将IGP协议学习到的或者静态路由注入到BGP中,成为BGP路由,BGP路由携带有丰富的路 ...

  2. pro-engineer&UG

    Pro/Engineer操作软件是美国参数技术公司(PTC)旗下的CAD/CAM/CAE一体化的三维软件.Pro/Engineer软件以参数化著称,是参数化技术的最早应用者,在目前的三维造型软件领域中 ...

  3. 在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹)

    在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹) 1 列出所有需要copy的sh文件 -bash-4.1$ ll /mysqllog/osw/*.sh ...

  4. linux tomcat部署含有matlab画图打包的java web程序

    首先说下问题:matlab可以把相关算法代码打包成jar文件共java调用,本例使用的jar文件的作用是画图并保存,然后部署在linux的tomcat中进行发布.这里出现了一个问题,具体如下:linu ...

  5. poj 3280 Cheapest Palindrome ---(DP 回文串)

    题目链接:http://poj.org/problem?id=3280 思路: dp[i][j] :=第i个字符到第j个字符之间形成回文串的最小费用. dp[i][j]=min(dp[i+1][j]+ ...

  6. HTML5特性检測

    HTML5特性检測:    1.检測全局对象:诸如window或navigator是否拥有特定的属性    2.创建元素:检測该元素的DOM对象是否拥有特定的属性    3.创建元素:检測该元素的DO ...

  7. 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】

    View状态分类 在View视图中定义了多种和界面效果相关的状态,比如拥有焦点Focused.按下Pressed等,不同的状态一般会显示不同的界面效果,而且视图状态会随着用户的操作而改变,一般通过xm ...

  8. 怎样从Hadoop安全模式中进入正常模式

    问题: 在Hadoop中,新建一个文件夹,报错了,提示mkdir: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot c ...

  9. 详细分析Java中断机制(转)

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  10. u-boot: Error: Can&#39;t overwrite &quot;ethaddr&quot;

    When try to execute following command, It reports error as following: --->8--- U-Boot> setenv ...