![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
mayaofeiyang
这个作者很懒,什么都没留下…
展开
-
libtar编译和使用
libtar下载 编译和使用1.libtar简介libtar开源库使用C语言编写,可为使用者提供C级别的创建和解压tar包的方法;2.libtar下载地址https://repo.or.cz/libtar.git3.libtar编译3.1下载源码通过上述地址下载libtar源码,我下载的是2013-12-08 Tim Band Added autoconf instructions...原创 2019-12-26 16:32:46 · 3379 阅读 · 0 评论 -
a++和++a
a++表示先运算后自加;先取得a的值,然后进行一系列运算.然后再自加比如b=a+++a++;这里面就有两个a++,都是先取得a的值,然后进行一系列运算(算数运算,关系运算,逻辑运算),这里的运算为加法运算和赋值运算,一系列运算结束以后再进行自加运算,得到a自身的值,假设a的值为1,这里b的值为2,a的值为3。++a表示先自加后运算;先将a进行自加运算,再参与一些列运算。比如b=++原创 2013-10-14 13:07:51 · 836 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两原创 2013-10-16 00:23:11 · 557 阅读 · 0 评论 -
判断单链表是否存在环,判断两个链表是否相交问题详解
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如何找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fas转载 2013-10-31 21:47:56 · 599 阅读 · 0 评论 -
返回局部变量的问题
函数返回局部变量,是返回局部变量的值。但指针(或地址)是一种特殊的值,所以返回局部指针变量需要特别注意。正确情况下,作为函数返回值的局部指针,其所指向对象的作用域应该是调用者作用域、全局或静态常量区;指向栈空间对象的指针作为返回值,存在潜在的错误。1. 返回局部值变量[cpp] view plaincopyint num(void) {转载 2013-10-31 22:16:52 · 987 阅读 · 0 评论 -
C语言字符串反转函数
找工作前写了篇blog说要做些常见的笔试面试题,像单链表反转啊字符串反转啊之类的题目,但是只写了一篇单链表反转就没再继续写下去,因为觉得实在没什么好写的,不过都是一些简单的指针操作罢了,但是还是有很多新手问这个问题,而且我在腾讯二面的时候也被要求实现这个函数,那我也写一篇blog介绍一下字符串反转吧。 C语言中所谓的字符串不过是字符数组,后跟一个0x00字符标识结尾,所以反转起来很容易,转载 2013-10-31 21:49:10 · 1181 阅读 · 0 评论 -
高频笔试题strcpy()的写法
题目:已知strcpy函数的原型是1char * strcpy(char * strDest, const char * strSrc);不调用库函数,实现strcpy函数。解释为什么要返回char *。解说:1. strcpy的实现代码1char * strcp转载 2013-11-02 17:34:29 · 1078 阅读 · 0 评论 -
c/c++面试题
1、const 有什么用途?(请至少说明两种)答:(1)可以定义 const 常量(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。 2、在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”?答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后转载 2013-11-03 20:23:17 · 1053 阅读 · 0 评论 -
数组名
以下为Windows NT下的32位C++程序,请计算sizeof的值void Func ( char str[100] ){ sizeof( str ) = ?}void *p = malloc( 100 );sizeof ( p ) = ?sizeof( str ) = 4sizeof ( p ) = 4Func ( char str[100] )函原创 2013-11-03 16:20:14 · 962 阅读 · 0 评论 -
宏定义
写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?least = MIN(*p++, b);解答:#define MIN(A,B) ((A) MIN(*p++, b)会产生宏的副作用这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时原创 2013-11-03 16:26:15 · 999 阅读 · 0 评论 -
网络传输中遇到的字节序问题
因为本人最近做的项目是路由器和交换机管理平台的开发,所以经常会遇到在一台路由器上测试没有任何问题,但是在另一台设备上测试就出现了问题的现象,最后发现还是字节序的问题,虽然对字节序的问题每次都很重视,但是总是在开发中遗漏或者忽略,字节序问题真是令人防不胜防。究其根本原因,一方面是因为自己对字节序的理解还停留在表面上,另一方面可能还是开发经验不足吧,呵呵。在网上看到了许多讲字节序的文章,大部分都讲原创 2014-12-27 18:39:47 · 2147 阅读 · 1 评论 -
free(): invalid next size (fast): 0x0000000000aa4430问题
最近在编写代码过程中遇到了一个问题,打印信息如题目所示:free(): invalid next size (fast): 0x0000000000aa4430。查看生成的core文件的bt信息,显示如下:#0 0x00007f4910cb35f7 in raise () from /lib64/libc.so.6#1 0x00007f4910cb4ce8 in abort ()原创 2017-08-21 19:48:54 · 14223 阅读 · 0 评论 -
char *p 与char p[] 比较
char *p 与char p[] 比较所有的字符窜常量都被放在静态内存区因为字符串常量很少需要修改,放在静态内存区会提高效率例:char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5转载 2013-10-12 11:27:54 · 617 阅读 · 0 评论 -
关于静态存储区域,堆,栈
有关动态对象创建:一般来说,编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存 全局变量和静态变量,栈存储调用函数相关的变量、地址等,堆存储动态生成的变量,在c中是指由malloc,free运算产生释放的存储空间,在c++中 就是指new和delete运算符作用的存储区域。1、 静态存储分配指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个转载 2013-09-25 11:21:07 · 844 阅读 · 0 评论 -
变量存储区域及其作用域
变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个*********************************************变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。转载 2013-09-25 11:22:09 · 837 阅读 · 0 评论 -
struct和typedef struct
struct和typedef struct分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu转载 2013-01-11 16:03:00 · 414 阅读 · 0 评论 -
static
static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; //原创 2013-09-15 13:06:26 · 623 阅读 · 0 评论 -
定义两个相互依赖的结构体
Typedef struct A AAA;Typedef struct B BBB;struct A{BBB *p;int a;int b;}struct B{AAA *p;int aa;int bb;}原创 2013-09-17 13:07:43 · 1775 阅读 · 0 评论 -
枚举类型
枚举 在实际问题中, 有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月, 一个班每周有六门课程等等。如果把这些量说明为整型, 字符型或其它类型显然是不妥当的。 为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是, 枚举类型是一种基本数据类型,而不是一种构原创 2013-09-21 14:42:13 · 548 阅读 · 0 评论 -
C语言之字符串
在字符串学习的过程中发现:当使用puts函数输出字符串的时候会将字符串结束标志‘\0’转换成‘\n’,即输出完字符串后换行。但是使用printf函数的时候就不会换行。这是使用这两个函数输出字符串的不同之处。C语言中可以将字符直接赋给一个字符型变量或者字符数组元素。例如:char a[5],c1; c1='A'; a[0]='B';但是不能用复制语句将一个字符串常量或者字符数组原创 2013-09-21 16:21:05 · 863 阅读 · 0 评论 -
C工程
一个工程中只能有一个入口函数,即main()函数;C语言规定一个工程是从main开始执行的,其他的函数都在主函数里调用。原创 2013-09-21 16:24:09 · 824 阅读 · 0 评论 -
C之结构体与联合
结构类型定义和结构变量说明 在实际问题中,一组数据往往具有不同的数据类型。例如, 在学生登记表中,姓名应为字符型;学号可为整型或字符型; 年龄应为整型;性别应为字符型;成绩可为整型或实型。 显然不能用一个数组来存放这一组数据。 因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构”。 它相当于其它高级语言中的记录。原创 2013-09-21 17:42:53 · 707 阅读 · 0 评论 -
perror函数
头文件#includestdio.h>#include注意不可以掉了#include这个头文件,perror是包含在这个文件里的定义函数void perror(const char *s); perror ("open_port");函数说明perror( ) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再原创 2013-10-06 14:42:42 · 684 阅读 · 0 评论 -
C语言之C语言概论
C语言概论include称为文件包含命令,扩展名为.h的文件也称为头文件或首部文件。预处理命令有好几种,include称为文件包含命令,其意义是把尖括号""或引号scanf和printf这两个函数分别称为格式输入函数和格式输出函数。其意义是按指定的格式输入输出值。C源程序的结构特点1.一个C语言源程序可以由一个或多个源文件组成。2.每个源文件可由一个或多个函数组成。原创 2013-09-22 16:36:52 · 1603 阅读 · 0 评论 -
传参和输出格式
编写一个函数的时候遇到一个问题:代码如下main(){ int f; scanf("%d",&f); printf("%f",f);}输出的结果完全和输入的数字不同,比如输入一个200输出-0.021961。经过询问才得知浮点数和整型数的存储格式不一样,传参和输出格式要一致,看来细节还是没有掌握啊原创 2013-10-09 10:52:33 · 572 阅读 · 0 评论 -
返回局部变量指针
一般我们都知道不能返回局部变量的指针,但很多人知道其然,不知道所以然,那么接下来我们分析一下,先看两段代码/*test1.c*/#include char* get_str(){ char str[] = {"hello"}; return str;}int main(){ char* p = get_str(); p转载 2013-09-25 10:51:25 · 848 阅读 · 0 评论 -
memset()函数
memset函数使用详解今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值. 1。void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值转载 2013-01-11 16:35:06 · 568 阅读 · 0 评论