![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 53
cy941228
这个作者很懒,什么都没留下…
展开
-
交叉编译
交叉编译的作用? 为什么需要交叉编译器? 交叉编译器的版本? 如何获取交叉编译器?面试回答:我们知道不同的平台CPU体系结构不同,所使用的汇编也不相同。比如Windows下是X86汇编生成的可执行文件,而ARM中需要ARM汇编生成的可执行文件。如果我们直接将x86平台下生成的可执行文件放入ARM中是不能执行的。因此嵌入式软件开发采用交叉编译方式,通过交叉编译器在转载 2016-09-13 22:08:53 · 356 阅读 · 0 评论 -
C/C++ 编写一个程序,实现输出链表中倒数第K个结点
编写一个程序,实现输出链表中倒数第K个结点 ListNode * FindKthToTail(LisNode *head, unsigned int k) { if(head == NULL || K == 0) //入口参数检查!!! { return NULL; } int i; ListNode *pAhead = head; Lis原创 2016-12-02 21:18:09 · 415 阅读 · 0 评论 -
约瑟夫环
一、思路分析 (1)可将人的顺序简单编号,从1到N; (2)构造一个循环链表,可以解决首位相连的问题,同时如果将人的编号改为人名或者其他比较方便 (3)将人的编号插入到结构体的Data域; (4)遍历人的编号,输出参与的人的编号; (5)开始报数,从头报数,报到k的人出局(删除次结点),(输出出局的人更人性化)避免浪费,转载 2016-12-12 21:38:20 · 263 阅读 · 0 评论 -
青蛙跳阶
在剑指offer这本书里存在这样几个问题,它们是这样描述的: 【问题描述一】: 一只青蛙一次可以跳上1级台阶,也可以跳上两级台阶。求该青蛙跳上一个n级台阶总共有多少种跳法? 拿到这样一道题我们应该如何考虑呢?当然我们首先要考虑的就是简单的方面了!当只有一级台阶时(n=1),此时青蛙跳一次就可以完成目标;当只有两级台阶时(n=2),青蛙可以一次跳一级台阶分两次完成也可以一次跳两级台阶原创 2016-12-13 22:19:34 · 272 阅读 · 0 评论 -
heap&stack 区别
以下内容来自<程序员面试宝典>一、预备知识— 程序的内存分配 一个由C/C++ 编译的 程序占用的内存分为以下几个部分 1 、 栈区(stack )— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2 、堆区(heap ) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS 回 收 。注意它与数据结构中的堆是两回事,分原创 2016-12-15 22:08:10 · 162 阅读 · 0 评论 -
c语言==判断一个数是否为2的整数次方【不使用循环】
对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。 [cpp] view plain copy 在CODE上查看代码片派生到我的代码片 void judge(int n) { while(!(n % 2)) { n = n / 2; if(n == 1)翻译 2016-12-22 22:39:33 · 271 阅读 · 0 评论 -
深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const
深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p一、可能的组合:(1)const char*p(2)char const*p(3)char *const p (4)const char **p(5)char const**p(6)char *con转载 2016-12-18 22:37:44 · 225 阅读 · 0 评论 -
自己实现strstr库函数
编程实现字符串中子串的查找/*********************************************** - Copyright (C): 2016 - File name : my_strstr.c - Author : - Zxn - - Date : 2016年08月28日 星期日 10时06分19秒 - Descript原创 2016-12-24 21:54:18 · 321 阅读 · 0 评论 -
C语言判断两个数组是否有相同的元素
一】当存在相同的元素时一步一步跳出循环include pragma warning(disable:4996)int main() { int arr1[] = { 1, 3, 5, 7, 9 }; int arr2[] = { 1, 2, 4, 6, 8, 10 }; int i, j, flag = 0; for (i = 0; i < size转载 2016-12-17 23:18:58 · 4486 阅读 · 0 评论 -
C++对C的升级
C++对C的升级 1、 声明定义 C++中更强调语言的实时性,所有的变量都可在使用时再定义。 例:for(int i = 0; i < 10; i++) 2、 register关键字的升级 在C++中依然支持register关键字,并且可以取得register变量的地址,在进行取地址时编译器会将该变量优化到内存中 3、 const关键字 在C++中,编译器会为const常量分配空原创 2017-02-08 20:33:26 · 208 阅读 · 0 评论 -
C++ 类与对象
1、 面向对象的特点 (1) 抽象性:提高代码的灵活性 (2) 封装性:提高代码的维护性 (3) 继承性:提高代码的复用性 (4) 多态性:提高代码的扩展性 2、 类与对象 (1)类的声明: 举例:class 类名称 { Public: 公有成员(外部接口) Priate: 私有成员 Pro原创 2017-02-09 10:11:31 · 155 阅读 · 0 评论 -
C++必须使用【初始化列表】初始化数据成员的三种情况
类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员; 2.进入构造函数后在构造函数中执行一般赋值与计算。 使用初始化列表有两个原因: 原因1.必须这样做: 《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表: 情况一、需要初始化的数据成员是对象的情况(这里包含了继承情况下,通过显示调用父类的构造函数对父类数据成员进行初始化);转载 2017-02-09 16:56:53 · 546 阅读 · 0 评论 -
C++设计模式(一)
1、模式:在一定环境中解决某一问题的方案,包括三个基本元素–问题,解决方案和环境(固定套路)。 2、设计模式的分类 **创建型模式 通常和对象的创建有关,涉及到对象实例化的方式。(共5种模式) 结构型模式 描述的是如何组合类和对象以获得更大的结构。(共7种模式) 行为型模式 用来对类或对象怎样交互和怎样分配职责进行描述。(共11种模式)** 3、设原创 2017-03-22 20:12:42 · 176 阅读 · 0 评论 -
C++的四种强制类型转换
C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是static_cast<type>(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。原创 2017-04-20 15:07:15 · 201 阅读 · 0 评论 -
软考复习资料:专题一:计算机系统知识
专题一:计算机系统知识 1、计算机硬件基础知识: 1.1计算机系统结构 计算机的发展历史: 1946年,世界上第一台电子计算机ENIAC出现,之后经历了5个发展阶段:冯式结构计算机的组成部分:存储器、运算器、控制器、输入设备和输出设备。强化的概念: 计算机的工作过程:一般是由用户使用各种编程语言把所需要完成的任务以程序的形式提交给计算机,然后翻译成计算机能直接执行的机器语言原创 2017-04-21 18:12:57 · 3866 阅读 · 0 评论 -
编程实现2的1000次方
编程思路:因为结果数据太大,我们肯定不能用叠乘然后将结果输出,这样会造成溢出。正确的思路是用一个数组来存储这个结果,结果数据的每一位都存放在数组中,最后逆向输出数组中的内容就是正确的结果#include <iostream>#include <vector>int main(){ int base,count; //定义底数和幂次数 vector<int> result; //这原创 2017-07-12 18:11:09 · 1481 阅读 · 0 评论 -
如何判断一棵树是否为平衡二叉树
判断的思路很简单,若一棵树是平衡二叉树,它的左右子树都是平衡二叉树,并且左右子树的高度差小于等于1。注意,实现的时候,判断左右子树的平衡性时,可以顺便计算子树高度,不用再另外计算一次,下面是其递归实现:#include <iostream>using namespace std;struct TreeNode { int val; TreeNode *left; Tree原创 2017-07-12 18:14:42 · 1025 阅读 · 0 评论 -
volatile关键字的作用
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short flag; voi转载 2016-12-11 20:30:26 · 287 阅读 · 0 评论 -
C语言模拟试卷一
试卷二一、填空选择题1、请写出 char *p 与“零值”比较的 if 语句 解:if( p == NULL) 2、写出打印结果___255____ #include #include int main() { char a[1000]; int i; for(i=0;i原创 2016-12-01 19:25:34 · 511 阅读 · 1 评论 -
C/C++ strlen(a)的值是多少
int main() { char a[1000]; int i; for(i=0; i { a[i] = -1-i; } printf("%d",strlen(a)); return 0; }此题看上去真的很简单,但是却鲜有人答对。答案是255。别惊讶,我们先分析分析。for 循环内,当i 的值为0 时,a[0]的值为原创 2016-11-29 20:56:21 · 932 阅读 · 0 评论 -
对static、const等六个关键字的理解
关键字1、 registr关键字register关键字是用来请求编译器尽可能地将变量的值保存在CPU内存的寄存器中,这样省去了CPU在内存中抓取数据的时间,从而提高了程序运行的效率。我们通常用registr来修饰频繁被访问的变量。我们来对registr关键字的功能做一些解释:(1)、为什么说是尽可能地保存在寄存器中?因为寄存器的内存有限,我们不可能把所有变量都存放在寄存器中原创 2016-07-23 21:55:51 · 336 阅读 · 0 评论 -
函数
读(不修改)实参变量对应内存空间的值时,传实参变量名写(修改)实参变量对应内存空间的值时,传实参变量的地址 不仅仅是我们编写的的函数有形参,我们常常编写的主函数也是有形参的int main(int argc,char *argv[ ])我们来做一下解释,argc:传参的个数(包括命令本身) *argv[ ]:参原创 2016-07-21 10:38:38 · 390 阅读 · 0 评论 -
数组与指针
数组在谈到数组的时候,我们需要记住一句话:数组名是指针变量,保存数组首元素的地址 一维数组:在C89标准中,数组是不可以用数组名来表示的,我们需要注意的是在定义数组的时候要定义数组的长度#define MAX_SIZE 1024Int a[MAX_SIZE]={0};Printf(“a=%p\n”,a);//打印数组首元素地址Printf(“&a=%p\n”,&a);/原创 2016-07-21 10:34:11 · 211 阅读 · 0 评论 -
malloc ralloc calloc 的区别
先来看一下三个函数的声明:void *malloc(usigned size);void * realloc(void *ptr,unsigned newsize);void *calloc(size_t numElements, size_t sizeofElement);它们都包含在#include头文件中,他们的返回值都是请求分配的地址,如果请求失败就返回NU原创 2016-07-19 22:54:23 · 202 阅读 · 0 评论 -
左右法则
左右法则 左右法则在我们学习语言的时候非常重要,我们只有弄清楚变量的类型才能根据变量的范围定义。 The right-left rule: Start reading thedeclaration from the innermost parentheses, go right, and then go left. Whenyou encounter parentheses, the原创 2016-07-11 14:46:26 · 263 阅读 · 0 评论 -
指针
指针定义:指针是一个变量,保存的是地址举例:int num=5;我们用16进制来保存5即0x00000005int *p=# 在这里我们说两个概念:(1) 对应的内存空间(2) 指向的内存空间num++:对num对应的内存空间的值加1p++:对p对应的内存空间的值加1(对于指针,要考虑指针的原创 2016-07-16 12:41:15 · 201 阅读 · 0 评论 -
strlen,strcpy,strcat,strcmp函数的实现
编写一个程序实现strlen()的功能编写一个程序实现strcpy()的功能编写一个程序实现strcat()的功能原创 2016-07-16 14:34:03 · 310 阅读 · 0 评论 -
gcc编译的一点小知识点
三级优化分别做什么?-o1:可以部分减小代码尺寸,对运行速度有一定的提高。较多地使用了寄存器变量,提高了指令的并行度,减小执行时间。-o2:几乎包含gcc所有优化选项,但是不执行函数内嵌和循环展开。一般在生成固化代码时使用该选项较为适宜。-o3:包含-o2的所有优化,并且还包含了解循环、函数插装和静态变量优化。通常情况下,该级优化生成的代码执行速度最快,但是代码尺寸比-o2大一些原创 2016-07-16 14:49:25 · 286 阅读 · 0 评论 -
数组、函数一些小细节
数组的空间是连续。 数组大小是数组的类型X数组的个数。 固定大小数组是在编程时就确定的 动态数组是在运行时分配的。 组数是效率最高的数据结构,但需要空间连续,固不可以很大。什么时候数组和指针可以相同呢? 所有作为函数参数的数组名总是可以通过编译器转换为指针。在其他所有情况下(最有趣的情况就是“在一个文件中定义为数组,在另一个文件中声明为指针”),数组原创 2016-09-15 22:10:22 · 160 阅读 · 0 评论 -
C/C++ 返回整型数组中的最大数值
#include int find_str(int *str){ int max = 0; while(*str != '\0') { if(*str > max) { max = *str; } str++; } return max; }int main(){ int str[]; int max; scanf("%d",&str); max = find_max(str); printf("原创 2016-10-09 22:50:35 · 617 阅读 · 0 评论 -
C语言小程序—整型与字符型的相互转换
将字符型转换为整型:#include #include #define MAX_SIZE 100 int my_atoi(char *src){ int flag = 1; int result = 0; if(*src == '-') { flag = -1; sr原创 2016-09-24 23:14:03 · 442 阅读 · 0 评论 -
C语言小程序—实现strlen等字符串函数
用函数实现strlen:int my_strlen(char *src){ int len=0; while(src!='\0') { src++; len++; } return len;}用函数实现strcpy:char *my_strcpy(char *dest,char *src)原创 2016-09-25 21:02:30 · 209 阅读 · 0 评论 -
C语言小程序—实现十进数转化为十六进制
将十进制数转化为十六进制数:#include char *int2hex(unsigned int num){static char hex[11];hex[0]=’0’;hex[1]=’x’;hex[10]=’\0’;unsigned int mask=0x0000000f;int i=0;for(i=9;i>=0;i--){ hex[i]原创 2016-09-26 22:24:46 · 561 阅读 · 0 评论 -
C语言小程序—头尾标志查找子字符串
比如说字符串dasheuhhellodfndsworldcni,输入头为hello,输入尾为world,那么结果为hellodfndsworld 程序为:#include#include#define MAX_SIZE 1024 int my_strncmp(char *src,char *head,int len){int i=0;for(i=0;i{原创 2016-09-28 07:06:46 · 360 阅读 · 0 评论 -
C语言小程序—找出字符串中出现次数最少的字符并删除
找出字符串中出现次数最少的字符并删除main函数: 1 #include 2 #define MAX_SIZE 1024 3 4 int main() 5 { 6 char src[MAX_SIZE]; 7 printf("please input string:"); 8 scanf("%s",src); 9 i原创 2016-09-28 14:31:44 · 830 阅读 · 0 评论 -
C/C++ 递归方法计算n的阶乘
longfactorial( int n ){ if( n { return 1; } else { return n * factorial( n - 1); }}原创 2016-10-10 21:16:08 · 2824 阅读 · 0 评论 -
链表的逆序
创建一个带头节点的链表并把链表的逆序(递归法),链表遍历[cpp] view plain copy #include #include /* define structure of linklist */ typedef struct Node { int data;原创 2016-11-28 20:37:38 · 151 阅读 · 0 评论 -
C中的类型自动提升、printf("%08x",number)
同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型。以下是自动类型转换的基本规则:1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被原创 2017-07-06 10:37:05 · 947 阅读 · 0 评论