![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 67
qq_35212671
这个作者很懒,什么都没留下…
展开
-
自己实现strstr函数与strchr函数
const char *my_strstr(const char *str, const char *sub_str) { for(int i = 0; str[i] != '\0'; i++) { int tem = i; //tem保留主串中的起始判断下标位置 int j = 0; while原创 2017-07-06 15:10:04 · 604 阅读 · 0 评论 -
函数的可重入性
1.什么是可重入性重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。可重入的函数必须满足以下三个条件:(1)可以在执行的过程中可以被打断;(2)被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered)。(3)再次调用执行完之后,被打断的上次调用可以原创 2016-11-21 22:42:22 · 369 阅读 · 1 评论 -
函数如何实现“多个返回值”?
方法1:利用全局变量 分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下原创 2016-12-06 22:44:15 · 7628 阅读 · 0 评论 -
C语言位运算
位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 " 3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 4 ">>>"运算符转载 2016-11-23 22:04:44 · 266 阅读 · 0 评论 -
字符串逆序的几种方法
普通逆序char* Reverse(char* s){ //将q指向字符串最后一个字符 char* q = s ; while( *q++ ) ; q -= 2 ; //分配空间,存储逆序后的字符串。 char* p = newchar[sizeof(char) * (q - s + 2)] ; char* r = p ;转载 2016-12-05 23:20:09 · 2960 阅读 · 0 评论 -
C和C++中struct和typedef struct的异同
分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int a; }Stu; 于是在声明变量的时候就可:Stu stu1;(如果没有typedef就必须用struct Student stu1;来声明) 这里的Stu实际上就是转载 2016-11-22 22:22:44 · 196 阅读 · 0 评论 -
为什么8位有符号数的取值范围是-128~+127
首先我们知道,计算机以补码的形式存储的,正数的补码是原码不变,负数的补码是原码的取反加1。我们先来看+127,原码0111 1111对吧,若+128是多少呢,0111 1111 + 1 = 1000 0000 (原码),然后存储时,计算机一看是最高位为1,就保持符号位不变,后面7位取反加1,然后呢,进位舍弃,还是1000 0000(-128)。所以对于8位数据来说,+128 实际上变成 -原创 2016-12-04 22:57:34 · 4817 阅读 · 0 评论 -
字符串数组 和 字符串指针 的区别
在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。一、字符数组 使用char str[]定义一个字符数组str,中括号内可以写上数字表示数组大小,也可以不写。如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。可以使用字符串字面转载 2016-12-02 23:29:36 · 2450 阅读 · 0 评论 -
C语言清空缓冲区
看下面一个例子:[cpp] view plain copy #include int main() { int num; char ch ; scanf("%d", &num); scanf("%c", &ch); printf("hello world\n"转载 2016-11-20 22:22:03 · 12653 阅读 · 5 评论 -
什么是C语言中的条件编译?
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else转载 2016-11-19 23:20:28 · 575 阅读 · 0 评论 -
位运算求平均数
对于位运算求两个数的平均值问题,(整形数据)int average(int x,int y){return ( (x&y) + ( (x^y)>>1 ) );}12341234给出两个整数,求出结果。 刚开始看到这道题的做法就是x和y转换为二进制,然后计算出结果。在没有办法的情况下这样做也可以得出结果。跟你想象的一点不差,这里确实有捷径。题目中的&和^都是位原创 2016-12-01 21:16:02 · 1941 阅读 · 0 评论 -
C语言中返回错误信息的函数总结
C语言strerror()函数:返回错误原因的描述字符串头文件:#include 定义函数:char * strerror(int errnum);函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回.返回值:返回描述错误原因的字符串指针.范例:[c原创 2016-11-18 23:33:13 · 9179 阅读 · 0 评论 -
C语言练习题1
char *getmemory(void){char p[] = “hello world”;return p;}void test(void){char *str = NULL;str = getmemory();printf(“%s\n”,str); }请问运行Test会有什么样的结果?A. 出原创 2016-12-13 22:25:09 · 325 阅读 · 0 评论 -
C语言编译过程
hello.c源代码如下:?[Copy to clipboard]View Code C123456[c] view plaincopy"color:#339933">#include "color:#993333">int main"color:#009900"转载 2016-11-25 23:24:16 · 249 阅读 · 0 评论 -
自己实现strcpy,strncpy,strncat,strcmp,strlen的功能
#include #define MAX_SIZE 1024char * my_strcpy(char *dest,char *src){ char *temp = dest; while(*dest != '\0') { *dest = *src; dest++; src++; } *dest = '\0';原创 2016-09-20 23:36:32 · 315 阅读 · 0 评论 -
快速弄懂内存字节对齐
字节对齐有三原则:1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。 2:结构体作为成员:如果一个结构里有某些结构体成员,原创 2017-07-06 10:59:44 · 1228 阅读 · 0 评论 -
STL6大标准库的关系和作用
STL六大组件简介1、容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部分很像冰山载海面的比率。2、算法(Algorithms):各种常用算法如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种Function Temp转载 2017-02-13 20:27:10 · 2020 阅读 · 0 评论 -
带缓冲的I/O操作和不带缓冲的I/O操作
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用。系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其写数据时,直接调用系统调用,将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才会把数据写入磁盘。因此所谓的不带缓冲的I/O是指进程不提供缓冲功能(但内核还是提供缓冲的)。每调用一次write或re转载 2016-12-20 23:12:35 · 841 阅读 · 0 评论 -
typedef 函数指针的用法
进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。用法一:typedef int (*MYFUN)(int, int); 这种用法一般用在给函数定义别名的时候上面的例转载 2016-12-17 23:59:10 · 444 阅读 · 0 评论 -
const char *p,char const *p, char * const p之间的区别
const char * p 和 char const * p 是一个意思,都是p所指向的变量的值不能改变,例如:const char ch = 'a';const char* p = &ch;*p = 'b'; //这样是错的char* const p,意思是p所指向的地址是不能改变的,例如:char* const p = &ch1;p = &ch2; //这样是错的原创 2016-12-19 23:07:39 · 637 阅读 · 0 评论 -
int *ptr=(int *)(&a+1)
int *ptr=(int *)(&a+1)(面试题),有需要的朋友可以参考下。【问题】:请写出以下程序的输出结果。int main(){ int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d\n",*(a+1),*(ptr-1));}【分析】:此题需要理解指针和数组的内在含义。转载 2016-12-24 22:14:44 · 942 阅读 · 0 评论 -
自己实现strcpy
一个标准的strcpy函数:原本以为自己对strcpy还算比较了解,结果面试时还是悲剧了。下面给出网上strcpy的得分版本:2分void strcpy( char *strDest, char *strSrc ){ while( (*strDest++ = * strSrc++) != '\0’ );}转载 2016-12-22 22:24:02 · 2300 阅读 · 0 评论 -
什么是枚举
枚举类型在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不转载 2016-12-15 22:20:52 · 1279 阅读 · 0 评论 -
malloc和free的深层次分析
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助转载 2016-11-27 22:23:37 · 222 阅读 · 0 评论 -
Linux下对文件操作时出现乱码怎么办?
Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助。如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。查看文件编码 在Linux中查看文原创 2016-11-26 23:38:07 · 850 阅读 · 0 评论 -
什么是堆,栈,内存泄漏和内存溢出?
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(h转载 2016-12-10 23:36:56 · 5947 阅读 · 3 评论 -
程序运行的时间的估算
1 大部分程序的大部分指令之执行一次,或者最多几次。如果一个程序的所有指令都具有这样的性质,我们说这个程序的执行时间是常数。 logN 如果一个程序的运行时间是对数级的,则随着N的增大程序会渐渐慢下来,如果一个程序将一个大的问题分解成一系列更小的问题,每一步都将问题的规 模缩减成几分之一 ,一般就会出现这样的运行时间函数。在我们所关心的范围内,可以认为运行时间小于一个大的常数原创 2016-11-30 22:23:04 · 2880 阅读 · 0 评论 -
字节、半字、字对齐方式
一、字节对齐基本概念 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存转载 2016-11-14 21:57:21 · 624 阅读 · 0 评论 -
system函数 与 exec函数的区别
system是用shell来调用程序=fork+exec+waitpid,而exec是直接让你的程序代替用来的程序运行。system 是在单独的进程中执行命令,完了还会回到你的程序中。而exec函数是直接在你的进程中执行新的程序,新的程序会把你的程序覆盖,除非调用出错,否则你再也回不到exec后面的代码,就是说你的程序就变成了exec调用的那个程序了。看一下,下面的例子.例子1------原创 2016-10-21 19:13:20 · 1371 阅读 · 0 评论 -
joseph-cir_head_singlelink
#include #include struct node{ int num; struct node* next;};typedef struct node Node;typedef Node* Link;void init_Link(Link* head){ *head = (Link)malloc(sizeof(Nod原创 2016-09-25 19:14:08 · 244 阅读 · 0 评论 -
cir_head_singlelink
#include #include struct node{ int num; struct node* next;};typedef struct node Node;typedef Node* Link;void init_Link(Link* head){ *head = (Link)malloc(sizeof(Nod原创 2016-09-23 18:42:45 · 219 阅读 · 0 评论 -
single link
#include #include struct node{ int num; struct node* next;};typedef struct node Node;typedef Node* Link;void init_Link(Link* head){ *head = (Link)malloc(sizeof(Node)原创 2016-09-22 19:41:39 · 474 阅读 · 0 评论 -
汇编程序.c到a.out的生命历程
使用gcc编译程序时,编译过程可以分为四个阶段:1.预处理阶段预处理阶段就是将头文件中的内容加载到.c文件的上方。输入命令gcc -E test.c -o test.i。执行-E命令,只对.c文件进行预编译,不做其他操作。将生成文件命名为test.i2.编译阶段编译阶段会进行词法分析,语法分析,语义分析。在shell中输入命令“gcc -c te原创 2016-07-07 00:34:06 · 483 阅读 · 1 评论 -
C语言的特点是什么?
1.为什么嵌入式开发中选择C语言作为开发语言 / C语言的特点是什么?①移植性好:适用于不同平台,代码移植时只需做较少修改或不做修改②能直接访问硬件: (汇编和C都能直接访问硬件,但C是高级语言含高级语法,所以对硬件做复杂操作时选择C语言,对硬件做初始化时选择汇编)③运行效率高:C可以直接在机器上运行,一些高级语言需要相应的语言解释器做解释后,才能在机器上运行。(比如原创 2016-07-11 10:55:01 · 4200 阅读 · 0 评论 -
什么是野指针和内存泄漏?如何避免野指针
内存泄漏:①访问已经释放的内存 ②访问没有权限的内存野指针:指向内存被释放的内存或者没有访问权限的内存的指针。“野指针”的成因主要有3种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。例如char *原创 2016-07-15 20:35:48 · 9787 阅读 · 0 评论 -
memcpy和strcpy的区别及memcmp和strcmp的区别
strcpy与memcpy的区别:strcpy的原型:char *strcpy(char *dest, const char *src)strcpy是拷贝字符串。①以\0为标志结束(即一旦遇到'\0'拷贝过程即停止)。②只能拷贝字符串。memcpy的原型:void *memcpy(void *dest, const void *src, size_t n);memcpy原创 2016-07-16 09:47:11 · 941 阅读 · 0 评论 -
malloc,realloc,calloc的使用场合及特点,以及malloc的实现原理
malloc:原型 : extern void *malloc(unsigned int num_bytes);何时使用:当需要在内存的动态存储区中分配一块长度为num_bytes字节的连续区域时。参数num_bytes为需要的内存空间的长度,返回该区域的地址。特点:malloc在动态分配完内存后不对分配的内存空间初始化,里边数据是随机的垃圾数据。原创 2016-07-18 20:14:00 · 861 阅读 · 0 评论 -
C语言如何"实现"面向对象?
实现“类”:c语言中用struct来表述对应的类。实现“封装”:一个.c文件中存放一个函数(用以实现一个功能)或存放一个结构体。实现“继承”:即结构体的包含关系。一个结构体的成员变量的类型为另一个结构体的类型。实现“多态”:用函数指针实现。函数指针作形参。例: int add(int num1,int num2) { ret原创 2016-07-20 20:51:28 · 336 阅读 · 1 评论 -
函数的相关知识
函数的三要素:函数名、函数形参、返回值 1.函数名:①函数名是指针常量,保存函数的入口地址。 ②自注释性、动词+名词 - - - 增加可读性 例:delete_ch_count_min 2.函数形参:①(写)当需要修改实参的值时,将实参地址传给形参。②(读)当只使用不修改实参的值时,将实参值传给形参。原创 2016-07-26 13:03:40 · 281 阅读 · 0 评论 -
question: student_link
现有男女学生链表(链表结点中有名字和年龄两个元素):①将 男学生链表 和 女学生链表按年龄从小到大合并,②将合并后的链表逆序排列,③通过年龄能搜索到该年龄的学生的姓名。#include #include #include #include #define MAX_SIZE 20struct student{ int age; char name[MA原创 2016-09-26 18:55:58 · 319 阅读 · 0 评论