
C/C++
文章平均质量分 58
Eleanor_gao
这个作者很懒,什么都没留下…
展开
-
左右法则解决复杂声明
现在很多IT公司的面试题都或多或少会有复杂声明的题,有一点C基础的人或许能够瞎搬乱套做对,但这样你肯定不爽,一方面显得不专业,有点自欺欺人的感觉,另一方面如果遇到更加复杂的声明就彻底傻了,本篇主要就一些复杂的声明介绍一种方法,这个有些书上也有介绍,比如《C专家编程》。个人觉得这个没有必要深究,只做了解即可,很多时候编程都很难用到,不过这也是大神和一般程序员的区别。右左法则不是C转载 2016-09-24 23:51:59 · 338 阅读 · 0 评论 -
C语言——运算符操作时的类型转换问题
以取反操作为例,来看下面这一个例子:下面程序的输出结果是多少 250 #include int main(){unsigned char a = 0xA5;unsigned char b = ~ a >> 4 + 1;printf(“b = %d\n”, b);return 0;}解析:考察两个知识点:一是类型转换问题,二是运算符优先级的问题,优先级~原创 2016-12-12 22:21:42 · 512 阅读 · 0 评论 -
C语言——合并两个递增排序链表
struct node{int num;struct node *next;};typedef struct node Node;typedef Node * Link;Link Merge(Link head1, Link head2){If(head1 == NULL) return head2;If(head2 == NULL) return head1;Link m原创 2016-12-13 23:08:34 · 1208 阅读 · 0 评论 -
C语言——把自己编程实现字符串函数strstr
char * my_strstr(char *str, char *ptr){ if(str == NULL || ptr == NULL) return NULL; int i; int j; int flag = 0; for(i = 0; i < strlen(str); i++) { for(j = 0; j < strl原创 2016-12-15 23:20:43 · 700 阅读 · 0 评论 -
C语言——约瑟夫环
设编号1,2…..n的n个人围坐在一圈,任选一个正整数作为报数的上限值,从第k个人开始按顺时针报数,数到m的那个人出局,他的顺时针方向下一位又从1开始报数,数到m的那个人又出局,以此类推,直到所有人出局为止,请用链表写一个函数找出每轮的幸存者。(假设n个人已经插入链表)struct{int num;struct node *next;}typedef struct node N原创 2016-12-22 22:44:16 · 888 阅读 · 0 评论 -
C语言——以尽量高效的方法用”*”打印出一个空心正方形
请以尽量高效的方法用”*”打印出一个空心正方形,num为边长。void print_square(int num);#include int main(){ int x,y,num; printf("please input the num:\n"); scanf("%d",&num); for(x = 0; x < num; x++)原创 2016-12-23 22:46:32 · 5482 阅读 · 1 评论 -
C语言——不使用循环判断一个数是否为2的N次方
对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。 void judge(int n) { while(!(n % 2)) { n = n / 2; if(n == 1) { printf("yes!\n);转载 2016-12-24 22:38:42 · 1347 阅读 · 0 评论 -
C语言——用联合体判断大小端
用联合体判断大小端,大端返回0,小端返回1union w { int a; char b; } u;int judge(){u test;test.a = 1;if(test.b == 1){ return 1;}else{return 0;}}原创 2016-12-17 22:54:32 · 1032 阅读 · 0 评论 -
C语言——用联合体判断大小端
用联合体判断大小端,大端返回0,小端返回1union w { int a; char b; } u;int judge(){u test;test.a = 1;if(test.b == 1){ return 1;}else{return 0;}}原创 2016-12-17 22:57:53 · 513 阅读 · 0 评论 -
C语言——用联合体判断大小端
用联合体判断大小端,大端返回0,小端返回1union w { int a; char b; } u;int judge(){u test;test.a = 1;if(test.b == 1){ return 1;}else{return 0;}}原创 2016-12-17 22:59:10 · 721 阅读 · 0 评论 -
C语言——用联合体判断大小端
用联合体判断大小端,大端返回0,小端返回1 union w { int a; char b; } u;int judge(){u test;test.a = 1;if(test.b == 1){ return 1;}else{return 0;}}原创 2016-12-17 23:04:05 · 515 阅读 · 0 评论 -
C语言——删除字符串中的指定子串
问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数: int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】 str:输入的被操作字符串 sub_str:需要查找并删除的特定子字符串【输出】 result转载 2016-12-25 21:20:26 · 11654 阅读 · 0 评论 -
C语言——堆和栈的区别
简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据原创 2016-12-20 22:38:50 · 533 阅读 · 0 评论 -
C++基础——C++对C的升级
1.定义的声明与C语言相比,C++中更加强调语言的“实用性”,所有的变量都可以在需要使用时再定义例如:for(int i = 0; i < 10; i++){for(int j = 0; j < 10; j++){ ......}}两个计数变量都可以在使用的时候定义,这时他们的作用范围只在这个循环中,循环结束就将被释放 2.register关键词的变化原创 2017-02-06 20:04:46 · 500 阅读 · 0 评论 -
C++——面向对象编程初步了解
一、什么是面向对象面向将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。 二、面向对象的优点1、易维护 采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。2、质量高 在设计时,可重用现有的,在以前的项目的原创 2017-02-07 18:58:36 · 636 阅读 · 0 评论 -
C++——类和对象
1.类的声明类是一种用户自定义类型,声明形式如下:Class 类名称{Public: 公有成员(外部接口)Private: 私有成员Protected: 保护成员}; 2.公有、私有、保护成员公有成员(public)公有成员是在public关键字的后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数私原创 2017-02-08 20:58:56 · 556 阅读 · 0 评论 -
C++——构造函数和析构函数初识
1.构造函数构造函数是特殊的成员函数创建类类型的新对象时,系统会自动调用构造函数构造函数是为了保证对象的每个数据成员都被正确初始化①构造函数的特点函数名和类名完全相同不能定义构造函数的类型(返回类型),也不能使用void通常情况下构造函数应声明为公有函数,否则它不能向其他函数那样显式地调用构造函数被声明为私有时有特殊的用途②默认构造函数:不带参数的构造函数如原创 2017-02-09 10:28:53 · 680 阅读 · 0 评论 -
C语言——用递归算法判断数组是否为一个递增数组
1.递归一定要有退出条件,否则将无限循环。2.关于递归的返回值是要注意的。下面列举两种方法,原理相同,递归判断。方法1:bool charge(int p[],int n){ static int m=0; //这个一定要定义为static,否则每次调用都是从0开始。 if(m == n-1) return true; else转载 2016-12-14 21:47:35 · 3686 阅读 · 0 评论 -
C语言——内存分配的方式
1、全局变量和静态变量(static变量),是由编译器自动分配和释放的,初始化的全局变量和静态变量放在同一块内存区中,未初始化的全局变量和静态变量则放在相邻的另外一块内存区中。2、栈,是由编译器自动分配和释放的,主要是函数体的地址,参数和局部变量,静态变量不包含其中,操作方式类似于数据结构中的栈。3、堆,是由程序员手动完成申请和释放的,像malloc和new,程序员没有手动释放的话,当程序原创 2016-12-02 23:16:43 · 440 阅读 · 0 评论 -
C语言中的复合数据类型
一、结构体1.作用:封装数据,把多种不同的数据类型放在一起2.定义:一般放在全局,定义时不要忘记在结尾的“}”后加上“;”3.初始化分为静态初始化和动态初始化在动态初始化时要注意:①给结构体中的数组成员赋值时,不能直接将字符串赋给数组名,可以使用strcpy函数②给结构体中的指针变量成员赋值时,要先给指针分配空间,否则它会使一个野指针原创 2016-07-25 11:15:38 · 2651 阅读 · 1 评论 -
函数学习的一些总结
一、代码写成函数的好处1.提高代码的复用性,可以直接调用函数2.提高代码的维护性,函数应具有独立的功能,避免在函数内调用其他的函数3.迭代开发二、函数的三要素:函数名,形参,返回值1、函数名函数名也是一个指针常量,保存的是函数的地址函数名应当具有自注释性,即函数名应当体现出函数的功能,这样可以提高代码的可读性但是,用“_”连接的单原创 2016-07-21 10:11:42 · 884 阅读 · 0 评论 -
数组的学习总结
一、数组的定义以及初始化1.整型数组:在C89中,不支持使用变量定义数组的长度①一维整型数组数组名是一个指针常量,保存的是首元素的地址(不可做自加操作)在定义的时候初始化:int a[3] = {1,2,3} 或 int a[ ] = {1,2,3}键盘读入初始化(五种方法):int *p = a;for(i = 0; i { sca原创 2016-07-19 19:57:16 · 674 阅读 · 0 评论 -
对于指针学习的一些总结
一、指向的内存空间 VS 对应的内存空间以int *p = num 举例来说num++:对num对应的内存空间的值加1p++:对p对应的内存空间的值加1(加的是步长)(*p)++:根据p对应的空间里保存的地址找到其对应的空间 = 对p指向的内存空间进行操作从上面的例子可以总结出:*p:操作的是p指向的内存空间p:操作的是p对应的内存空间二、一维指针、二维指针原创 2016-07-19 10:40:27 · 673 阅读 · 0 评论 -
自己编写代码实现常用字符串函数的功能
常见的字符串函数包括strlen,strcpy和strncpy,strcat和strncat,strcmp和strncmp,下面一一描述他们的功能和实现方法。①strlen()原型:extern int strlen(char *s);用法:#include 功能:计算字符串s的长度说明:返回s的长度,不包括结束符NULL。实现代码:#include #define原创 2016-07-16 14:23:15 · 866 阅读 · 0 评论 -
自己编写代码实现atoi和itoa函数的功能
自己编写代码实现atoi和itoa函数的功能1. atoi(ascii to integer)函数:把字符串转换成整形数的一个函数,检测到非数字字符时停止转换。atoi函数的实现代码:#include #include #define MAX_SIZE 1024int my_atoi(char *ptr){ int i,k = 0;原创 2016-07-14 16:20:49 · 989 阅读 · 0 评论 -
关于C语言标准的一些总结
C语言的标准有哪些?从C语言问世至今,我们通常认为的C语言标准是指:K&RC、C89、C99、C111.K&RC 1978年,丹尼斯•里奇(Dennis Ritchie)和布莱恩•柯林汉(Brian Kernighan)合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程式设计师称作“K&R C”,第二版的书中也包含了一些ANSI原创 2016-07-11 15:10:46 · 668 阅读 · 0 评论 -
嵌入式开发为什么选择C语言?
嵌入式开发为什么选择C语言?1.从语言特点来说:①C语言有出色的可移植性,能在多种不同体系结构的软/硬平台上运行②简洁紧凑,使用灵活的语法机制,并能直接访问硬件 能够直接访问硬件的语言有:汇编和C语言 汇编属于低级语言,难以完成一些复杂的功能,但是汇编比C语言访问硬件的效率更高 所以,一般将硬件初始化的工作交给汇编,比较复杂的操作交给C语言③C原创 2016-07-10 22:23:03 · 2598 阅读 · 1 评论 -
Makefile的使用——模板
在生活中实际编程的时候,我们往往将一个工程划分为若干个子目录,相同类型的文件放在一个子目录中,例如:include目录用来存放头文件,lib目录用来存放库,功能不同的.c文件放在不同的目录下。这时候,如果使用gcc编译器进行编译的话会非常麻烦,需要一个个进入目录然后编译,所以一般我们会选择make工程管理器进行编译,只要编写三类的makefile就可以实现对整个工程的编译了。三类mak原创 2016-07-09 09:50:34 · 673 阅读 · 0 评论 -
简单的C语言小题目隐藏的知识(一)
有时候,一些简单的选择,填空能够弥补我们对C理论知识上的空缺,使我们在实际编程时可以运用一些技巧大大提高编译以及运行的效率。希望我在做题时遇到的知识空白也能够帮到大家。1.下面哪种C/C++分配内存的方法会将分配的空间初始化为0: A.malloc()B.calloc()C.realloc()D.new[ ] 解析:1) malloc函数:voi原创 2016-07-07 17:18:45 · 556 阅读 · 0 评论 -
从.c文件到可执行文件的四个阶段
预处理:gcc -E test.c -o test.i①头文件的展开(加载);②宏替换③处理条件编译总结:处理以“#”开头的语句注:预处理不做语法检查编译:gcc -c test.i -o test.o①语法检查②词法分析汇编:gcc -s test.o -o test.s①将c语言转化为汇原创 2016-07-06 23:10:07 · 1325 阅读 · 1 评论 -
C语言——使用scanf函数时需要注意的问题
转自:http://blog.youkuaiyun.com/wayne92 scanf函数我曾经在这个函数上犯过不少错误,也看到别人犯过的错误,记下来,提醒自己不要重蹈覆辙了。如果对你有用,那就更好了:)如果你发现文章中有错误,欢迎你不吝赐 教。希望和大家一起学习!曾经错的几个地方:(xpsp2,vc6.0环境下)1.空白符问题[cpp] view pla转载 2016-11-29 22:45:18 · 1187 阅读 · 0 评论 -
C语言——strlen(a)的值为多少
#include "stdio.h"#include "string.h"int main(){ char a[1000]; int i; for(i=0; i<1000; i++) { a[i] = -1-i; } printf("%d",strlen(a)); return 0;}此题看上去真的很简单,但是却鲜有人答对。答案是255。别惊讶,我们先分析原创 2016-11-28 21:57:32 · 4414 阅读 · 0 评论 -
C语言——
下面这段程序f(657, 789)输出的值为多少int f(int x, int y){return (x&y)+((x^y)>>1)}分析:题目中的&和^都是位运算,所以我们有必要研究数据的对位情况。任何数据只有3中情况。1) 0 与 0对应2) 0 与 1对应3)1 与 1对应那么它们分别什么诀窍呢?举例子来说:0101 和1101 也就是x和y分别为原创 2016-11-30 21:39:25 · 395 阅读 · 0 评论 -
C语言——蛇形代码的例子
编写一个程序,输出类似的蛇形代码:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 #include #include int main(){int n;int x,y,round;//a[x][y],x是二维数组的第一个下标,y是二维数组的第二个下标,//round是转的圈数,原创 2016-12-10 20:46:16 · 982 阅读 · 0 评论 -
C语言——printf函数的结合顺序
下面用一个例子来看:int arr[] = {6,7,8,9,10};int *ptr = arr;*(ptr++)+=123;printf(“ %d %d ”, *ptr, *(++ptr));分析:int *ptr = arr;此时指针指向第一个元素,即6*(ptr++)+=123;此时指针ptr自加表示地址加一,指向第二个元素printf(“ %d原创 2016-12-02 23:10:42 · 905 阅读 · 0 评论 -
C++——深入构造函数
1.转换构造函数转换构造函数就是单个参数的构造函数转换构造函数的作用是将其他类型转换为类类型类的构造函数只有一个参数是非常危险的,因为编译器可以使用这种构造函数把参数的类型隐式转换为类类型 2.初始化和赋值在初始化语句中的等号不是运算符。编译器对这种语法有特殊的解释而赋值使用的语法为Test& Test::operator = (const Test& other)原创 2017-02-09 16:22:16 · 624 阅读 · 0 评论