
C语言
文章平均质量分 57
db199410
这个作者很懒,什么都没留下…
展开
-
sizeof和strlen的区别
一 sizeof 1.sizeof是一个运算符,它在头文件中被重命名为unsigned int . 2.它的作用是计算一种数据类型所占的字节数。 3.它的对象可以是数组,指针,对象,函数,结构体等。 4.它在编译阶段就完成了大小计算,所以不可以用来计算动态分配的空间的大小,而且sizeof的值与空间中的内容无关 5.sizeof计算各种数据类型时的含义: 数组名–表示数组类型的字节数(原创 2016-05-23 15:45:59 · 242 阅读 · 0 评论 -
指针和引用的区别
首先看一下这两者的定义 指针:是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。 引用:是某个已知变量 或对象的别名,它不是变量,自身没有值和地址,不占用内存空间。一:指针和引用的区别 1. 引用必须被初始化,而指针不初始化也没有太大的问题。 引用是一原创 2016-05-22 12:24:23 · 1424 阅读 · 0 评论 -
大数的运算
大数运算指的是对C语言中那些大到超出表示范围的数的运算,比如9999999999999999999999999999999+9999999999999999999999999。C语言中无法将这么大的一个数存储到变量中,这里就要用到大数的运算了。大数加法: 思路很简单,就是把这个“大数”以字符串的形式存入数组中,然后倒序放入整型数组便于逐步相加。附上代码如下void add(char*num1, c原创 2016-05-21 23:39:03 · 505 阅读 · 0 评论 -
函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
Windows下的调用约定可以是stdcall/cdecl/fastcall,这些标识加在函数名前面,如:int __stdcall funca()但在Linux下,如按照上面写法后,编译程序将导致编译错误,Linux下正确的语法如下:int __attribute__((__stdcall__)) funca()int __attribute__((__cdecl转载 2016-05-22 10:54:45 · 764 阅读 · 0 评论 -
通过栈帧来解释实参到形参的“似的单向传递”
1.目的是在函数中改变数组的内容(数组的内容成功交换)#include #include int main(){ void Sort ( char* name [], int n); void print ( char* name [], int n); char * name [] = { "Follow me" , "BASIC", "Great Wa原创 2016-04-11 14:44:13 · 475 阅读 · 0 评论 -
指针和数组的区别
指针和数组很多相似点,但他们也存在着很大的区别。今天我想通过将数组声明为指针和将指针声明为数组的方式来展示他们之间的区别1.将数组声明为指针文件1中代码如下:#include char arr[] = "abcdef";文件2中代码如下:#include原创 2016-04-16 15:18:54 · 331 阅读 · 0 评论 -
ifndef/define/endif作用和用法
.h文件,如下:#ifndef XX_H#define XX_H...#endif这样如果有两个地方都包含这个头文件,就不会出现两次包含的情况 。。因为在第二次包含时 XX_H 已经有定义了,所以就不再 include了--------------------------------------------------------------------------转载 2016-04-28 20:36:49 · 514 阅读 · 0 评论 -
关于内存访问与修改
这是前段时间看到的一段代码,之前一直找不到错在哪儿,经过一番调试和询问,终于找到了问题的关键#include#includevoid fun(unsigned int a, unsigned int b, unsigned int *c){*c = a + b;}int main(){unsigned char e = 200;unsig原创 2016-05-01 11:25:16 · 726 阅读 · 0 评论 -
浅析printf和scanf的返回之问题
今天老师问我一个问题:printf函数和scanf函数有没有返回值。我当时就蒙了,我不知道呀!确实这是一个比较冷门的问题,大多数人都不会怎么去关注它。经过我的一番研究,终于有所收获。scanf("格式控制",变量);首先附上一段代码: int a = 0, b = 0;int x = 0;x=scanf("%d,%d",&a,&b);pri原创 2016-05-07 19:24:46 · 292 阅读 · 0 评论 -
malloc和new的十一个区别
一 属性 1 new/delete是c++操作符 2 malloc/free是c/c++标准的库函数二 申请内存所在位置 1 new:自由存储区:自由存储区是c++基于new操作符的一个抽象概念。通过new申请的内存都称为自由存储区,自由存储区可以为堆,也可以为静态存储区(取决于operator new()在哪里为对象分配内存)。 2 malloc:堆:堆是操作系统的术语,是系统维护的原创 2016-06-03 09:36:14 · 274 阅读 · 0 评论 -
大小端存储
今天做到一道关于存储的题,顺便回顾一下大小端:union X{ int32_t a; struct { int16_t b; int16_t c; };};int main(){ X x; x.a=0x20150810; printf("%x,%x\n",x.b,x.c); return 0;}原创 2016-06-08 10:24:14 · 505 阅读 · 0 评论 -
C语言的缓冲区
1.什么是缓冲区缓冲区是内存的一部分空间,用缓冲输入输出的数据。缓冲区又分为输入缓冲区和输出缓冲区。缓冲区又被称为缓存.2.缓冲区存在的意义主要的意义就是为了提高cpu的效率。输入端。假如没有缓冲区,我们要从磁盘中读取数据,有几个字符,CPU就要读写几次,CPU是高速率的,而读取是低速率的,这样做会降低CPU的效率。相反如果将数据都存在缓冲区里面,等要读取的时候就可以一次性原创 2016-05-07 21:47:08 · 658 阅读 · 0 评论 -
inline详解
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内转载 2016-06-02 09:30:52 · 496 阅读 · 0 评论 -
vs中debug和relsese版本的区别
vs中的程序有debug和release两个版本,Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信 息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。 debug程序通常转载 2016-06-01 15:52:20 · 2008 阅读 · 0 评论 -
不同类型的变量相加
看下面的例子:#includeint main(){ char c; unsigned char uc; unsigned short us; c = 128; uc = 128; us = uc + c; printf("0x%x ",us); us = (unsigned char)c + uc; prin原创 2016-06-01 14:40:13 · 4793 阅读 · 0 评论 -
整型提升
K&R C中定义整型提升: 1. 只要一个表达式中用到了整型值,那么类型为char、short int活整型位域(这几者带符号或无符号均可)的变量,以及枚举类型的对象,都可以被放在这个整型变量的位置。 2. 如果1)中的变量的原始类型值域可以被int表示,那么原值被转换为int;否则的话,转为unsigned int。这段话理解起来是不是有点困难,我们来举个例子理解起来就简单了 char原创 2016-06-01 15:01:49 · 1382 阅读 · 0 评论 -
多级指针运算
今天看到一道题目,研究了好一会儿终于高明白了,在这里拿出来和大家分享一下:大家可以先行计算一下。#include <stdio.h>char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };char **cp[] = { c + 3, c + 2, c + 1, c };char ***cpp = cp;int main(void){ prin原创 2016-06-01 12:25:20 · 443 阅读 · 0 评论 -
可变参数列表
在c语言中,一般来说,函数的参数个数是确定的,并且是根据我们的需要传入指定的参数,但在某些情况下,我们需要可变的参数列表来实现某些功能,因此c语言引入可变参数列表。具体的函数有printf函数,scanf函数等。一可变参数列表的实现 为了实现可变参数列表,我们通常要用到stdarg.h头文件下的几个函数:void va_start(va_list ap, last); //va_start用来原创 2016-05-26 12:13:44 · 328 阅读 · 0 评论 -
约瑟夫环的实现
首先介绍一下约瑟夫环: 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后[1] 结果+1即为原问题的解。在这里用数组实现以下约瑟夫环,请看题: 有n只猴子原创 2016-06-10 13:23:50 · 504 阅读 · 0 评论