C语言知识汇总

1. strlen与sizeof差异问题:

以下程序的输出

#include <stdio.h>

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

sizeof(pts) is 8

sizeof(str) is 6

strlen(ptr) is 5

strlen(str) is 5

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

template<class T>
void judge_unsigned(T a)
{
	int shift=8*sizeof(a)-1;
	cout<<"sizeof(a) is "<<shift+1<<endl;

	if( (a|(1<<shift)) >= 0)
		cout<<a<<"is unsigned data"<<endl;
	else
		cout<<a<<"is signed data"<<endl;
}

void main()
{
	long long a=4;

	judge_unsigned(a);

	unsigned int b=4;
	judge_unsigned(b);

}

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

使用宏定义来做

template<class T>//使用模板函数实现
int get_size(T *a)//这里须要传进变量的地址
{
	return int(a+1)-int(a);
}
//使用宏来实现。这里将其强制转换成char*类型。除此之外,还需好在宏中对变量取地址
#define GetSize(val) ( (char *)(&val+1) - (char*)(&val) )

void main()
{
	int a[]={1,2,3};
	cout<<"a's size is: "<<get_size(&a)<<"define "<<GetSize(a)<<endl;

	double gd=4.5;
	cout<<"gd's size is: "<<get_size(&gd)<<"define: "<<GetSize(gd)<<endl;
}
时间: 2024-08-05 14:07:23

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

C语言知识汇总【需要更新】

  'getch' : undeclared identifier解决方案 在VC++6.0中编译程序 #include<stdio.h> void main() { printf("\nghjghj");  getch(); } 出现错误:error C2065: 'getch' : undeclared identifier 原因在于缺少头文件再要在头文件中添加#include<conio.h>问题即可解决 #include <graphics.h&g

Delphi基础知识汇总

☆Delphi基础数据类型 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 2147483647 4 有符号32位 Cardinal 0 .. 4294967295 4 无符号32位 Shortint -128 .. 127 1 有符号8位 Smallint -32768 .. 32767 2 有符号16位 Longint -2147483648 .. 2147483647 4 有符号32位 Int64 -263 .. 263 8 有符号64位 Byt

PB编程基础知识汇总

PB编程基础知识汇总 第一章      1.  程序的开始,application的open事件. 退出程序例程:halt为退出函数 int SureQuit SureQuit = 2 SureQuit=Messagebox("退出系统","退出前请确认已保存好数据",Question!,OKCancel!, 2) if SureQuit = 1 then halt 2.  变量定义有效范围: ◎     declare-globe 全局变量,整个程序均有效 ◎  

web前端工程师知识汇总

分类: Web开发应用 一.何为Web前端工程师? 前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发工程师,主要职责是利用(X)HTML/CSS/JavaScript/DOM/Flash等各种Web技术进行产品的界面开发.制作标准优化的代码,并增加交互动态功能,开发JavaScript以及Flash模块,同时结合后台开发技术模拟整体效果,进行丰富互联网的Web开发,致力于通过技术改善用户体验. Web前端工程师成长之路--知识汇总 图1.前端技术MSS W

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

沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的语法,对象的定义,类.接口.继承.静态.动态.重载.覆盖这些基本的概念和使用方法,到稍微高级一点的多线程,文件读写,网络编程,GUI使用,再到之后的反射机制.序列化.与数据库的结合等高级一点的用法,最后将设计模式应用其中,产生了一个个新的概念,比如Spring.Spring MVC.Hibernat

javascript常用知识汇总

javascript这个语言庞大而复杂,我用了三年多了,还是皮毛都不会.从刚开始的jquery,到后来的es6,每天都在学习,每天都在忘记. 1.禁止手机虚拟键盘弹出 在开发适配手机的页面时,出现了这么一个现象,我用了input标签,点击弹出一个选择框,就是那种picker组件,在手机上点击就会出现虚拟键盘,这个必须去掉.第一种是为input加入readonly属性,第二种用js代码的document.activeElement.blur() 123 $("#datePicker").

【转】ACM博弈知识汇总

博弈知识汇总 转自:http://www.cnblogs.com/kuangbin/archive/2011/08/28/2156426.html 有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可.两个人轮流从堆中取物体若干,规定最后取光物体者取胜.这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理.下面我们来分析一下要如何才能够取胜. (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.

JavaScript正則表達式知识汇总

Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegExp(); 3.RegExp 对象有 3 个方法: 1)test()检索字符串中的指定值,返回值是true或false. var p1=new Reg("e"); document.write(Reg.test("welcome to China!")); 2)exec

Lua语言基础汇总(3) -- 语句

赋值 赋值的基本含义是修改一个变量或一个table中字段的值,这个和其它语言没有多少区别,但是对于Lua,有一个特性,它允许“多重赋值”,也就是一下子将多个值赋予多个变量,例如以下代码: 1 2 3 local x1, x2 = 2, 4 print(x1)     -->2 print(x2)     -->4 在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值,例如以下用法,可以非常简便的交换两个元素的值: 1 2 3 4 local x1, x2 = 2, 4 x1, x2