C/C++
Y千年老妖
编程是一门艺术
专注 Linux C/C++,移动互联网开发
业精于勤,荒于嬉,行成于思,毁于随
展开
-
[C/C++]经典c程序(10例)
【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i for(j=1;j for (k=1;k转载 2013-06-03 09:48:01 · 698 阅读 · 0 评论 -
C语言指向指针的指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。在前面已经介绍过,通过指针访问变量称为间接访问。由于指针变量直接指向变量,所以称为“单级间址”。而如果通过指向指针的指针变量来访问变量则构成“二级间址”。从下图可以看到,name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。Name是一个数据,它的每一个元素都有相应的地址。数组名name转载 2014-04-16 08:54:43 · 561 阅读 · 0 评论 -
51单片机中断学习
一、中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二、中断源 在51单片机中有5个中断源 中断号转载 2014-03-22 17:35:18 · 1522 阅读 · 0 评论 -
浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU的架构是小端模式。但是对于浮点数在内存是如何存储的?目前所有的C/C++编译器转载 2014-10-26 23:32:46 · 535 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。转载 2014-11-14 23:13:58 · 529 阅读 · 0 评论 -
交换两个字符串
// 引用.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; //交换两个字符串--指针引用 //由于swap函数是指针引用,因此传入函数的就是实参,而不是形参 void swap(char *x,char*y){ char *p;转载 2014-12-02 23:44:27 · 861 阅读 · 0 评论 -
C++_运算符重载
什么是运算符的重载? 运算符与类结合,产生新的含义。 为什么要引入运算符重载? 作用:为了实现类的多态性(多态是指一个函数名有多种含义)怎么实现运算符的重载?方式:类的成员函数 或 友元函数(类外的普通函数)规则:不能重载的运算符有 . 和 .* 和 ?: 和 :: 和 sizeof友元函数和成员函数的使用转载 2014-12-21 23:23:57 · 388 阅读 · 0 评论 -
进程和线程
进程进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程是表示资源分配的基本单位,又是调度运行的基本单位。 进程特性:动态性,并发性,独立性,异步性 进程状态:1)就绪状态(Ready) 2)运行状态(Running) 3)阻塞状态(Blocked)转载 2014-12-12 10:19:36 · 340 阅读 · 0 评论 -
C++_友元函数
1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单、清晰 缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数。转载 2015-01-03 00:34:48 · 385 阅读 · 0 评论 -
Linux C++ boost库编译使用
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。原创 2015-03-02 21:22:39 · 3088 阅读 · 0 评论 -
strtok函数
strtok函数函数原型:char * strtok (char *str, const char * delimiters);#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;void main(){ char str[] = "abc,efd,hij,klm";原创 2015-03-03 00:01:22 · 372 阅读 · 0 评论 -
TinyXML:一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。DOM模型即文档对象转载 2015-04-13 22:55:28 · 365 阅读 · 0 评论 -
Qt多线程使用
1、MyWidget#ifndef MYWIDGET_H#define MYWIDGET_H#include class MyWidget : public QWidget{ Q_OBJECTpublic: explicit MyWidget(QWidget *parent = 0);signals:public slots: void slotT原创 2015-04-29 22:51:15 · 470 阅读 · 0 评论 -
有关sscanf()函数的知识
sscanf() 从一个字符串中读进与指定格式相符的数据.函数原型: int sscanf( const char *, const char *, ...); int scanf( const char *, ...);头文件: #include说明: sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入原创 2015-12-26 20:00:37 · 492 阅读 · 0 评论 -
内联函数(inline)总结
1:定义: 它们看起来象函数,运作起来象函数,比宏(macro)要好得多,使用时还不需要承担函数调用的开销。当内联一个函数时,编译器可以对函数体执行特定环境下的优化工作。这样的优化对"正常"的函数调用是不可能的。2:规则: inline关键字必须和函数体定义放在一起才可以实现内联,仅仅将inline放在函数声明之前不起任何作用。inline是一个用于实现的关键字转载 2016-01-30 20:15:40 · 20656 阅读 · 1 评论 -
C++中的左值和右值
左值和右值的定义在C++中,可以放到赋值操作符=左边的是左值,可以放到赋值操作符右边的是右值。有些变量既可以当左值又可以当右值。进一步来讲,左值为Lvalue,其实L代表Location,表示在内存中可以寻址,可以给它赋值(常量const类型也可以寻址,但是不能赋值),Rvalue中的R代表Read,就是可以知道它的值。例如:int a=3;a在内存中有地址,而3没有,但是转载 2016-01-30 20:17:13 · 469 阅读 · 0 评论 -
C语言指针数组的概念
一个数组的元素值为指针则是指针数组。 指针数组是一组有序的指针的集合。 指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为: 类型说明符 *数组名[数组长度]其中类型说明符为指针值所指向的变量的类型。例如: int *pa[3]表示pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量。【例1转载 2014-04-16 08:58:33 · 551 阅读 · 0 评论 -
C语言指向多维数组的指针
多维数组的地址设有整型二维数组a[3][4]如下:0 1 2 34 5 6 78 9 10 11 它的定义为: int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}设数组a的首地址为1000,各下标变量的首地址及其值如图所示。前面介绍过,C语言允许把一个二维数组分解为多个一维数组来处转载 2014-03-28 10:37:21 · 998 阅读 · 0 评论 -
c语言程序的编译过程
#includeint main(){ printf("Hello World!\n"); return 0;} 对于这个最简单的“Hello World!”程序——hello.c,它的生命周期一开始时是一个高级c程序,因为它处于这种形式时,它是能够被人读懂的。然而,为了在系统上运行hello.c程序,每条c语句都必须被其它程序转化为一系列的低转载 2013-06-04 15:48:38 · 1142 阅读 · 0 评论 -
C语言入门程序与存储器常见的有关错误
对c语言入门程序员来说,管理和使用虚拟存储器可能是个困难的,容易出错的任务。与存储器有关的错误属于那些最令人惊恐的错误,因为它们经常在时间和空间上,都在距错误源一段距离之后,才表现出来。将错误的数据编写到错误的位置,你的程序可能在最终失败之前运行了好几个小时,且使程序中止的位置距离错误的位置已经很远了。1、间接引用坏指针 在进程的虚拟地址空间中有较大的漏洞,没有映射到转载 2013-06-04 15:58:01 · 822 阅读 · 0 评论 -
C语言字符串的指针
在C语言中没有字符串变量,只要字符串常量,采用字符串指针可以对字符串常量进行操作,即用字符指针指向字符串常量,然后通过字符指针来访问字符串的存储区域。 1、 字符串的表示形式在C语言中,我们可以用两种方式访问字符串(1) 用字符数组存放一个字符串,然后输出该字符串。main(){ char string[]="i am a boy!";转载 2013-08-06 09:45:57 · 1044 阅读 · 0 评论 -
指针与引用的区别
指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因转载 2013-09-28 14:27:28 · 578 阅读 · 0 评论 -
C语言局部变量和全局变量
在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量。8.1.1局部变量 局部变量也称为内部变转载 2013-10-31 15:56:31 · 1421 阅读 · 0 评论 -
C文件操作
一、文件的读写1.1、文件的指针1.1.1、定义说明文件指针的一般形式为:FILE *指针变量标识符;1.2、文件的打开1.2.1、fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);“文件指针名”必须是被说明为FILE 类型的指针变量; “文件名”是被打开文件的文件名; “使用文件方式”是指文件的类型原创 2013-11-07 11:51:53 · 678 阅读 · 0 评论 -
C语言结构体
#includestruct date { int month; int day; int year; };struct student { char *name; int age; char sex; struct date birthday; float score;}boy1,*boy2,boy3={"wjy",22,'W',11,13,1991,原创 2013-12-06 10:31:59 · 810 阅读 · 0 评论 -
C语言函数指针变量
在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。函数指针变量定义的一般形式为: 类型说明符 (*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(转载 2013-12-06 14:56:33 · 1188 阅读 · 0 评论 -
C语言字符串的指针—字符串的表示形式
在C语言中,可以用两种方法访问一个字符串。一、用字符数组存放一个字符串,然后输出该字符串。【例10.24】main(){ char string[]=”I love China!”; printf("%s\n",string);}说明:和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址。二、用字符串指针指向一个字符串。【例10转载 2013-12-02 23:34:14 · 1951 阅读 · 0 评论 -
C语言动态存储分配
在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。例如: int n; scanf("%d",&n); int a[n];用变量表示长度,想对数组的大小作动态说明,这是错误的。但是在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用数组的办法很难解决。为了转载 2013-12-02 22:04:26 · 704 阅读 · 0 评论 -
C语言条件编译详解
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍:一、第一种形式:#ifdef 标识符 程序段1#else 程序段2#endif它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2转载 2013-10-31 15:54:35 · 733 阅读 · 0 评论 -
常见的C语言内存错误及对策
一、指针没有指向一块合法的内存定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。浅显的例子就不举了,这里举几个比较隐蔽的例子。1、结构体成员指针未初始化struct student{ char *name; int score;}stu,*pstu;intmain(){ strcpy(stu.name,"Jimy");转载 2013-12-04 16:56:37 · 637 阅读 · 0 评论 -
C语言入门指针操作
指针是一种保存变量地址的变量。首先,我们通过一个简单的示意图来说明内存是如何组织的。通常的机器都有一系列连续编号或者编址的存储单元,这些存储单元可以单个进行操纵,也可以以连续成组的方式操纵。通常情况下,机器的一个字节可以存放一个char类型的数据,两个相邻的字节存储单元可以存储一个short(短整型)类型的数据,而4个相邻的字节存储单元可以存储一个long(长整型)类型的数据。指针是能够存放一个地转载 2013-06-04 15:54:33 · 616 阅读 · 0 评论 -
C语言变量的存储类别
前面已经介绍了,从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。 静态存储方式:是指在程序运行期间分配固定的存储空间的方式。 动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。用户存储空间可以分为三个部分:程序区;静态转载 2013-10-31 15:57:41 · 1057 阅读 · 0 评论 -
关于指针的总结
指针的数据类型:定义含义int i;定义整型变量iint *pp为指向整型数据的指针变量int a[n];定义整型数组a,它有n个元素int *p[n];定义指针数组p,它由n个指向整型数据的指针元素组成int (*p)[n];p为指向含n个元素的一维转载 2014-03-17 15:54:20 · 532 阅读 · 0 评论 -
C++11:右值引用和转发型引用
右值引用为了解决移动语义及完美转发问题,C++11标准引入了右值引用(rvalue reference)这一重要的新概念。右值引用采用T&&这一语法形式,比传统的引用T&(如今被称作左值引用 lvalue reference)多一个&。如果把经由T&&这一语法形式所产生的引用类型都叫做右值引用,那么这种广义的右值引用又可分为以下三种类型:无名右值引用具名右值引用转发型引用无转载 2016-01-31 09:58:44 · 517 阅读 · 0 评论