c/c++
mindlesslcc
这个作者很懒,什么都没留下…
展开
-
scanf函数输入详解
我们学c语言的时候一定对于scanf函数很不陌生(如果陌生就完蛋了),我们写的代码其实就是一行行的字符串,是由编译器来吧字符串给编译成为cpu可以执行的代码,而scanf在从标准输入得到数据的时候也是一样的,他默认为读取的就是字符串,只不过按照你的%d之类的制表符来读取后又转换罢了。其实是由一个输入字符的缓冲区在的,他们可以看作一个输入的队列,在输入的时候把每队列的头部取出检验,假设是%d的说原创 2014-01-05 18:57:47 · 1517 阅读 · 0 评论 -
c语言的编译过程
c语言的开发是首先写出所有的源代码,然后编译成为可执行代码,然后才可以被cpu执行。c语言的源代码在编译器看来只不过是一堆字符串而已,在我们看来或许可以看得懂,但是在cpu看来会是一堆什么都不是的乱码,只有用编译器将这些字符串编译成为二进制命令才可以执行。编译的过程就是:首先把代码编译成为中间文件,中间文件就是二进制文件,但是这是cpu还不能执行,因为还没有用连接器进行连接原创 2013-12-24 19:38:15 · 932 阅读 · 0 评论 -
C/C++内存分配知识
原文出处:http://smilejay.com/2013/12/memory-allocation-in-c-and-cpp/C语言中内存分为五个区:栈(stack):用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。堆(heap):用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程转载 2014-02-16 14:03:34 · 1002 阅读 · 0 评论 -
c++类的构造函数
c++的一个重要特性就是类,这也是c++区别于c的最重要的一个地方,而类的构造函数是类的一个很重要的地方。默认构造函数:当一个类没有声明任何构造函数的时候,这个时候,编译器就会给这个类设置一个合成的默认构造函数,但是如果你给这个类写了一个构造函数的话,这个编译器不会再加上一个默认构造函数了。一般情况下,编译器默认无参数的构造函数是默认构造函数,当然,你也可以在一个构造函数的原创 2014-01-08 18:12:26 · 843 阅读 · 0 评论 -
c++的参数传递
c++有两种参数传递的方法,一种是值传递,一种是引用传递,值传递就是把形参的值又复制一份然后给函数,引用传递就是把形参直接传递给函数。类似的,在函数的返回值返回的时候,return 的变量也有两种,如果是值传递的话(就是函数的返回值不是引用),就会把return的变量复制一下,给调用它的变量。如果是引用传值的话,就会把函数内对应return的变量返回给他,所以,由此我们知道,不要返回局部对象的引用原创 2014-01-08 18:11:49 · 900 阅读 · 0 评论 -
c++的this指针
c++的对象里有一个指针一直指向他自己,这个指针就是this指针,这个指针是在类的成员函数内部隐式调用的。可以认为在类调用成员函数的时候,编译器会自动的在参数列表的最后一个位置加上一个指针,比如类名叫做 A,那么这个指针就是A *const this指针。是一个常量指针,但是指向非常量的对象,如果是一个常量对象的话,就不可以了,这意味着我们不可以把一个this指针指向一个常量的对象,如何解决这个问原创 2014-01-08 18:11:29 · 847 阅读 · 0 评论 -
c++的const详解
有时候我们需要一个一个变量,并且这个变量的值不可以改变,c++语言就提供了这么一个关键字,他就是const。一旦你把一个变量的声明成了const以后,以后任何试图改变const变量的操作都会被编译器认为是错误的,但是const变量一定要在对开始定义的时候初始化,没有初始化的const变量是非法的,用常量初始化或者是变量初始化都可以,只要它可以转换成为const声明的变量类型。原创 2014-01-08 18:11:03 · 1387 阅读 · 0 评论 -
迭代器
c++专门为一些容器vector以及string等设置了一种很好用的访问方法,就是迭代器。迭代器是一种类似指针的操作,迭代器支持从一个位置转换到另一个位置,以及对于对象的间接访问。使用迭代器用begin以及end方法就可以得到一个容器的迭代器,比如对于string类型的话,string::iterator p = str.begin()就可以得到一个strng对原创 2014-01-08 18:10:37 · 850 阅读 · 0 评论 -
c++的vector容器
c++还有一个很常用的容器就是vector容器,他是数组实现的,是一种可变长的容器,在很多的时候可以简化我们的编程。使用vector需要添加头文件#include 然后using std::vector或者using namespace std;vector的初始化以及定义由于vector是一种函数模版,所以系统也不知道vector的每一个元素是什原创 2014-01-08 18:10:12 · 848 阅读 · 0 评论 -
c++的string容器
c++相比c的一个好处就是实现了很多的容器和泛型算法,使得程序员的工作得到了很大的化简。其中一个很有用的泛型容器就是string。string是一个类,是一个在STL里边实现好了的类,由于他的很多功能都已经实现好了,所以对于程序员来说,这个stl模版类是很方便的。string的初始化和定义string str就可以完成string对象的定义,但是这时的str由默认构造函数来原创 2014-01-08 18:09:50 · 1907 阅读 · 0 评论 -
调试工具之assert和ndebug
c++提供了两种比较好的调试工具,他们就是assert和debug,他们可以在调试运行的时候假如在代码里边,在即将发布的时候删除这些代码即可。assert定义在cassert头文件里边,但是由于assert在很多文件里都有定义,所以有可能当你包括其他的头文件的时候已经包含了assert的定义。assert使用的时候,只需要assert()即可,括号里边是一个表达式,如果这个原创 2014-01-08 18:09:24 · 1270 阅读 · 0 评论 -
c语言跨平台的实用技巧
c语言在发展的历程中经历了c89和c99两个标准,为了实现c语言的跨平台的优点,就是在windows和Linux以及Unix上都可以执行,就需要进行一些跨平台的技巧了,但是不但c语言的标准多种多样,并且c语言的编译器也有很多种,gcc,lcc,vc++等,比如:对于int型有的编译器赋予4个字节,有的赋予2个字节。再次我给大家介绍一个好的技巧,就是inttypes.h头文件,这个头文件一般在编译器原创 2013-12-24 20:09:48 · 1480 阅读 · 0 评论 -
c语言的位操作
计算机本质上是01的位的,所以c语言的位操作更接近底层,也更快速一些,有很多场合我们需要位的操作,所以熟悉c语言的位操作是很有用的。位的基本操作有~,&,^,|几个。~是按位取反,就是按照二进制的位,如果是0就设置为1,如果是1就设置为0。&是按位与,0和1就是1,0和0就是0,1和1就是1.|就是按位或,0和1就是1,0和0就是0,1和1就是1。^就是按位异或,如果两个位原创 2014-01-08 18:08:49 · 996 阅读 · 0 评论 -
c语言预处理器指令
c语言有强大的预处理器指令,在很多情况下都是很有用的。首先介绍什么是预处理器,预处理器就是在程序的源代码编译之前,会对程序进行翻译工作,就是把这程序\之后的回车去掉,以及去掉注释,然后会把之间的空白自符去掉,然后再根据预处理指令把程序进行预处理操作,等着一切都进行完毕以后,就会进行编译操作。#define与#undef的使用:#define是最常用的预处理器指令原创 2014-01-06 22:51:20 · 3485 阅读 · 0 评论 -
c的IO字符串函数
c语言有强大的io函数操作字符串scanf是基本的io函数,也可以进行字符串的输入输出操作,用scanf("%c",&ch)输入char型字符的时候会得到输入的任何一个字符,包括换行\n,scanf("%s",s)的时候就会得到输入的字符串,但是如果遇见空格,tab或者换行的话就会停止输入,但是输出的话按照%s直接输出即可。gets函数可以直接忽略空格和tab,只是原创 2014-01-05 18:58:44 · 923 阅读 · 0 评论 -
重定向输入与输出
重定向输入与输出就是把原本程序需要的输入,比如是标准输入读入的数据改从文件输入得到,或者是写入到标准输出的数据更改成为写到标准输出。重定向输入与输出有两种方法,分别是freopen函数以及在操作系统内使用命令行进行。首先是第一种方法,就是freopen函数,他有三个参数,第一个是重定向的文件名,第二个是字符串,代表是读入还是写入,读入是"r",写入是"w",第三个就是原本读原创 2014-01-05 19:01:20 · 1061 阅读 · 1 评论 -
c语言的const关键字
在c语言中有个比较常用的关键字,const。const标识不可以改变当前变量的值,例如const int a=0;以后就会使得a是一个只为0的值,并且永远不会改变。const主要用在三个地方:1.在函数的参数传递的时候,如果希望一个参数不被函数所改变的话,就加上const关键字,这样子这个变量就不会被改变,如果有改变的话,编译就会通不过。一般是用在数组。原创 2014-01-05 19:19:08 · 776 阅读 · 0 评论 -
printf和scanf函数的返回值
printf和scanf函数都是c语言的stdio头文件里边很重要的io函数,但是很多人并不知道scanf函数和printf函数的返回值,其实他们的返回值也是有一定的用处的。首先是scanf函数,scanf函数是默认从标准输入文件读取字符串,按照提示符来转换成为要求的类型,他的返回值是成功读取的数值的个数,一般用来读取直到不能读取的判断上,如果读取的返回值是0,就代表读取失败,说明到了原创 2014-01-05 18:57:15 · 1176 阅读 · 0 评论 -
c语言的字符串转换函数
在c语言中,经常会用到字符串与数字之间进行转换的函数,有时候我们是自己写,但是其实c语言有内置的字符串和数字转换的函数库,就在string.h中。printf和sprintf函数都是把数字转换成为字符串的函数,只不过printf函数是打印到显示器上,sprintf是打印到内存里边。atoi是把字符串转换成为int型的整数,有一个参数是字符串,返回值是转换成为的int型数值。原创 2014-01-05 18:59:56 · 1230 阅读 · 0 评论 -
c语言的参数传递
c语言参数传递讲解首先给大家看一个样例程序int main(){ float n1 = 3.0; double n2 = 3.0; long n3 = 200000000; long n4 = 1234567890; printf("%.1e %.1e %.1e %.1e\n",n1,n2,n3,n4); printf原创 2014-01-05 19:00:40 · 974 阅读 · 0 评论 -
c语言的常用字符串函数
c语言对于字符串的操作提供了极佳的c语言函数库支持,都在string.h里边,如果是c++程序的话,用#Include也可以。strlen函数,返回字符串的长度,不包括\0。strcat函数,是连接两个字符串,第一个参数就是将要连接到的字符串,第二个是将要连接的字符串,但是strcat函数并不会检查第一个参数是否可以容纳第二个字符串的长度,这样子有一点漏洞其实。原创 2014-01-05 18:59:14 · 1213 阅读 · 0 评论 -
c语言的存储类
c语言有五种不同类型的存储类,了解他们会十分有助于对c语言的理解程度。描述c语言的存储类有作用域,链接类型以及存储时期三种描述方法。作用域是用来描述变量的可以引用的区域的一个概念,一般情况下使用的都是代码块作用域,就是在一块代码的{}内部有用的区域,还有一种叫做文件作用域,就是从他开始定义的地方开始到文件结束的地方都有用,这一般叫做全局变量。链接类型有两种,一种原创 2014-01-05 19:01:47 · 1028 阅读 · 0 评论 -
c语言main函数的参数
在c语言中,main函数也可以有参数,只是需要在命令行中进行输入,当然也可以在IDE中进行输入,但是不同的IDE有所不同,在命令行中的输入基本一致。看下边一段代码,int main(int argc,char *args[]){printf("%d\n"argc);for(int i=1;iprintf("%s\n",args[i]);}输出结果就是原创 2014-01-05 19:18:35 · 942 阅读 · 0 评论 -
c语言的goto语句
早期的basic以及fortran语言的goto语句在c语言里边依然是有效的,但是在c语言中,goto语句很容易被滥用,从而造成程序更为复杂,结构不清晰。goto语句的基本用法很简单,首先做一个标签,就是 a:就代表一个标签,标签后边的语句就是goto将要跳转的位置,然后goto a;即可。样例程序:int main(){ bool first =原创 2014-01-05 18:56:34 · 4630 阅读 · 1 评论 -
linux C --深入理解字符串处理函数 strlen() strcpy() strcat() strcmp()
在Linux C 编程中,我们经常遇到字符串的处理,最多的就是字符串的长度、拷贝字符串、比较字符串等;当然现在的C库中为我们提供了很多字符串处理函数。熟练的运用这些函数,可以减少编程工作量,这里介绍几个常用的字符串函数,并编写一些程序,如果没有这些库函数,我们将如何实现其功能;1 求字符串长度函数 strlen头文件:string.h函数原型:size_t strlen(c转载 2016-10-27 22:17:09 · 4015 阅读 · 0 评论