![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
ytuglt
这个作者很懒,什么都没留下…
展开
-
有符号数与无符号数的强制类…
在C语言中有符号数转化为无符号会出现一些问题,先看以下的程序例子: [cpp] viewplaincopyint main() { char ch[12] = {0xF0, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00}; unsigned int r原创 2015-07-16 11:08:01 · 311 阅读 · 0 评论 -
typedef和define有什么区别
(1)用法不同:typedef用来定义一种数据类型的别名,增强程序的可读性。define主要用来定义常量,以及书写复杂使用频繁的宏。 (2)执行时间不同:typedef是编译过程的一部分,有类型检查的功能。define是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。 (3)作用域不同:typedef有作用域限定。define不受作用域约束,只要是在原创 2015-07-16 11:07:48 · 270 阅读 · 0 评论 -
链表和数组有什么区别
数组和链表有以下几点不同: (1)存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间,长度可变,每个结点要保存相邻结点指针。 (2)数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,效率低。 (3)数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。 (4)越界问题:链表不存在越界问题,数组有越界问题原创 2015-07-16 11:07:46 · 592 阅读 · 0 评论 -
设置地址为0x67a9的整型变量的值为…
int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa66; 说明:这道题就是强制类型转换的典型例子,无论在什么平台地址长度和整型数据的长度是一样的,即一个整型数据可以强制转换成地址指针类型,只要有意义即可。原创 2015-07-16 11:07:41 · 1141 阅读 · 0 评论 -
sizeof和strlen的区别
sizeof是一个操作符,strlen是库函数。 sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘\0‘的字符串作参数。 编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。 数组做sizeof的参数不退化,传递给strlen就原创 2015-07-16 11:07:38 · 247 阅读 · 0 评论 -
共用体
1.共用体的概念把几种不同类型的变量放到同一段内存单元中,也就是用覆盖技术,几个变量相互覆盖。这样的结构称为“共用体”类型的结构。和定义结构体类似,定义共用体类型一般形式为:union 共用体名{成员表列}变量表列;2.共用体与结构体的异同结构体变量所占内存长度是各成员占内存长度之和。每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。原创 2015-07-16 11:07:53 · 527 阅读 · 0 评论 -
使用do{}while(0)的好处
#define MACRO_NAME(para) do{macrocontent}while(0)的格式,总结了以下几个原因:1,空的宏定义避免warning:#define foo() do{}while(0)2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现:#define foo(原创 2015-07-16 11:07:30 · 254 阅读 · 0 评论 -
c语言中的inline
在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。下面我们来看一个例子 [c-sharp] viewplainc原创 2015-07-16 11:08:12 · 1196 阅读 · 0 评论 -
回调函数
如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这称为回调函数(CallbackFunction)。例如qsort(3)和bsearch(3)。表 24.7. 回调函数示例:void func(void (*f)(void *), void *p);调用者实现者提供一个回调函数,再提供一个准备传给回调函数的参数。原创 2015-07-16 11:08:09 · 201 阅读 · 0 评论 -
const 内存分配情况
const 内存分配的情况const内存分配的情况简要的归纳了一下const常量的内存分配问题:c++的编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高,同时,这也是它取代预定义语句的重要基础。符号表的作用是登记源程序中出现的各种名字及其信息,以及编译各阶段的进展状况。 实现技术:线性原创 2015-07-16 11:08:04 · 315 阅读 · 0 评论 -
函数参数的传递问题(指针的指针)
程序1:voidmyMalloc(char *s) //我想在函数中分配内存,再返回{ s=(char *) malloc(100);}voidmain(){ char *p=NULL; myMalloc(p);//这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p);}程序2:voidmyMalloc(ch原创 2015-07-16 11:07:58 · 176 阅读 · 0 评论 -
结构体大小
含有基本类型的结构体的大小所对应的最终决定因素是结构体内自身成员的分布。成员不同的分布将导致含有相同成员结构体大小的不同,每个成员的对齐都是以紧接着后面的一个为参考的,如果紧接着的大于对应指定,就以紧接着的为对齐因子,否则将联系周围的具体情况进行对齐,而且对齐因子只有三种类型:1,2,4。对于最后一类孤立的成员,以结构体中最大成员一致。下面将通过实例来验证。【1】结构体变量的首地址能够原创 2015-07-16 11:07:51 · 541 阅读 · 0 评论 -
简述strcpy、sprintf与memcpy的区…
三者主要有以下不同之处: (1)操作对象不同,strcpy的两个操作对象均为字符串,sprintf的操作源对象可以是多种数据类型,目的操作对象是字符串,memcpy的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。 (2)执行效率不同,memcpy最高,strcpy次之,sprintf的效率最低。 (3)实现功能不同,strcpy主要实现字符串变量间的拷贝,sprintf原创 2015-07-16 11:07:43 · 392 阅读 · 0 评论 -
C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i; volat原创 2015-07-16 11:07:36 · 207 阅读 · 0 评论 -
stdin、stdout、stderr 的说明
fprintf 函数的功能是: Print formatted data to a stream格式化输出数据到流,这个流并没有特指是文件流。关于 stdin、stdout、stderr 的说明如下:By default, standard input is read from the keyboard, while standard output and standard error原创 2015-07-16 11:07:33 · 437 阅读 · 0 评论 -
#error
#error命令是C/C++语言的预处理命令之一,当预处理器预处理到#error命令时将停止编译并输出用户自定义的错误消息。语法:#error [用户自定义的错误消息]注:上述语法成份中的方括号“[]”代表用户自定义的错误消息可以省略不写。举例1:#error Sorry,an error has occurred!举例2:#error用法示例:#ifnde原创 2015-07-16 11:07:56 · 451 阅读 · 0 评论