C/C++语言
文章平均质量分 53
主要记录C/C++语言学习内容
2022-07-17
这个作者很懒,什么都没留下…
展开
-
C语言面试 - 函数指针的用法
面试题当对绝对地址0x100000赋值时,我们可以用(unsigned int*)0x100000 = 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?答案:((void ()( ))0x100000) ( );解答首先要将0x100000强制转换成函数指针,即:(void (*)())0x100000然后再调用它: *((void (*)())0x100000)();以上写法看起来不太直观,可以拆分为如下方式typedef void(*)() voidF原创 2021-08-30 17:09:51 · 164 阅读 · 0 评论 -
【stanford C++】容器III——Vector类
主要介绍如下5个容器类——Vector, Stack,Queue,Map和Set,各个都表示一重要的抽象数据类型。另外,各个类都是一些简单类型的值的集合,所以称它们为容器类。 暂且我们先不需要知道它们是如何实现的,我们先来学习一下如何使用它们。 为了能使用这些容器类,必须包含适合的接口,就像包含相应的库一样。如下:#include "vector.h"就是包含了Vector原创 2013-07-21 12:22:22 · 2434 阅读 · 0 评论 -
Linux下C++程序调试
Linux下调试C/C++的最好的工具是GDB, GDB是命令行的调试工具,GDB常用的命令如下:举例:1.新建一个文件C++源代码的文件swap.cpp,源代码如下:#include using namespace std;void swap(int &a, int &b);int main(){ int i, j; cout << "Inpu原创 2013-07-20 23:10:10 · 2382 阅读 · 0 评论 -
【stanford C++】容器I(Collection I)
学习计算机科学中常用的数据结构一、组织数据为了对问题进行建模和解决,我们必须有一种方法来表示结构化的数据。如:元素的顺序元素集元素之间关系等等。。一个容器类(Collection class或container class)是用来以某种方式存储和组织数据的数据类型。在软件工程中,理解和使用容器类非常关键。对于容器类,有很多的C++库的实现,通用的像S原创 2013-07-06 15:40:57 · 1196 阅读 · 0 评论 -
【stanford C++】字符串(String)与流(Stream)
字符串(String)与流(Stream)一、C++中字符串(String)字符串(String):就是(可能是空的)字符序列。C++中的字符串在概念上和Java中的字符串类似。原创 2013-07-02 22:18:12 · 1938 阅读 · 0 评论 -
【stanford C++】C++课程学习
C++课程网站:http://www.stanford.edu/class/cs106b/ (或)http://cs106b.stanford.eduhttp://www.stanford.edu/class/cs106l/ CS106B主要讲述的是C++的一些基本的编程概念,但是没有进行深入的介绍,其中使用了很多自己的定制库来取代C++的标准库,因此没有对C++中的细节部分进行探原创 2013-06-30 11:54:57 · 3332 阅读 · 0 评论 -
【stanford C++】——2.C++中函数
1. main()函数C++程序从main()函数开始执行:int main(){ /* ... code to execute ... */}按照约定,main函数应该返回0,除非程序遇到错误。 在C++中,使用cout来显示文本,同时使用cin接受输入。由于技术原因,已经实现了一些函数用于输入。库“simpio.h”包含用于读取输入的方法:int原创 2013-07-01 22:30:06 · 2090 阅读 · 0 评论 -
【stanford C++】——1.概述(Introduction)
需要学习的预备课程:CS106A: Programming Methodology (或同等课程)在学习本课程之前,需要对如下的概念熟悉:变量参数传递函数类和对象for/while循环if/else语句还有就是具有拿到一个问题后,转换为代码实现来解决的经验(这个最重要)需要阅读的教材:《Programming Abstractions in C++》 本课程的目标:原创 2013-06-30 13:16:48 · 1813 阅读 · 0 评论 -
C语言中umask函数的用法
umask函数:相关函数:creat, open头文件:#include pes.h> #include 定义函数:mode_t umask(mode_t mask);函数说明:umask()会将系统umask值设成参数mask&0777后的值, 然后将先前的umask值返回。在使用open()建立新文件时, 该参数mode 并非真正建立文件的权限, 而是(原创 2013-06-20 20:54:45 · 6540 阅读 · 0 评论 -
【stanford C++】容器II(Collection II)
一、VectorVector是用来存储一系列对象的容器类。类似于Java中的ArrayList类型在所有的编程中,可能是单个最常用的容器类型。 当使用容器类型(Stack、Vector等等)时,在调用函数时使用引用传递参数常常是非常有效的,这基于如下原因:因为当传值传递参数时,拷贝容器类参数将要花费很长的时间,这样降低了程序的效率。任何使用stack的地方都可以使用Ve原创 2013-07-06 22:52:03 · 1079 阅读 · 0 评论 -
Linux下pstack、strace和valgrind的使用
在Linux下进行程序开发时,需要对程序进行优化、减少程序响应时间。除了通用的对一段一段程序进行时间复杂度和空间复杂度进行分析以外,还可以将strace和pstack工具结合起来使用,直接用来找到影响程序运行时间的函数调用,再有针对地对相关函数进行代码分析和优化,对于几万行的代码的大型项目来说,该方法比漫无目的的看代码效率高很多。其中,strace跟踪程序使用的底层系统调用,可原创 2013-05-19 10:44:18 · 2827 阅读 · 0 评论 -
C++学习书籍
涵盖C++内容比较全的书籍:The C++ Programming LanguageC++ PrimerThinking in C++涵盖C++内容比较深奥的数据:The Annotated C++ Reference MannualInside the C++ Object Model专家经验积累的C++书籍:Effective C++More Effective原创 2013-10-05 19:39:56 · 861 阅读 · 0 评论 -
STL中容器适配器(Container Adapters)
前面的部分介绍了好几种类型的容器,除了在通用框架下工作的容器外,STL还提供了容器来适应特殊的情形。这些容器称为容器适配器(Container Adapters),适合于标准的STL容器在特定的环境中其作用。这些三种容器适配器为:栈(Stacks)队列(Queues)优先队列(Priority Queues)容器适配器不支持任何类型的迭代器,即迭代器不能用于这些类型的容器,接下来描原创 2013-11-23 22:25:09 · 2992 阅读 · 0 评论 -
STL中关联容器
本文介绍STL中的关联容器的内容。关联容器中的元素根据一些排序规则自动进行排序的。缺省的排序规则是关系运算符 因为关联容器中的元素是自动排序的,因此,当一个新的元素插入到容器中时,它插入到容器中适当的位置。一种方便和快速的实现该类数据结构的方式是使用二叉搜索树。实际上这就是关联容器实现的方式。因此,容器中每个元素有一个父节点(除了根结点),同时最多有两个孩子,对于各个元素,父节点的原创 2013-11-22 22:57:28 · 1317 阅读 · 0 评论 -
Linux内核模块编程入门-5(传递命令行参数到模块)
模块可以接受命令行参数,但是不是使用argc/argv。为了让参数传递到模块中,声明变量来存放命令行参数作为全局变量,然后使用module_param()宏来建立该机制,该宏定义在linux/moduleprarm.h中。在运行时,insmod将使用任何的命令行参数,像insmod mymodule.ko myvariable=5来填充参数。为清楚起见,变量声明和宏应该放在模块的开头,原创 2013-11-23 13:47:22 · 1904 阅读 · 0 评论 -
STL中迭代器
迭代器(Iterators)迭代器类似于指针。通常,迭代器指向于容器(序列容器或关联容器)中的元素,因此,借助于迭代器,我们可以成功的访问容器中的各个元素。 迭代器中两个非常常用的操作时++(增量操作符)和*(取值操作符)。假设cntItr为某个容器的迭代器,那么如下语句:++cntItr;其结果为增加cntItr,使其指向容器中的下一个元素,相似的如下语句:*cntItr原创 2013-11-21 22:52:01 · 1501 阅读 · 0 评论 -
STL中迭代器之流迭代器(Stream Iterator)
流迭代器(Stream Iterators)流迭代器——istream迭代器和ostream迭代器。该部分描述了这两种迭代器。istream_iteratoristream迭代器用于从输入流中输入数据到程序中。该类istream_iterator包含了输入流迭代器的定义,使用istream迭代器的通用语法如下:istream_iterator isIdentifier(is原创 2013-11-21 23:25:42 · 1796 阅读 · 0 评论 -
STL中序列容器之deque
以下学习一下STL中另一种序列容器——deque。deque表示double-ended queue,即双向队列,deque是通过作为动态数组的方式实现的,这样可以在两端插入元素。因此,deque可以在任何一个方向进行扩展。同时可以在中间插入元素。在开头或结尾处插入元素非常的快,然而在中间插入元素将会比较耗时间,因此需要移动队列中的元素。定义deque容器的类名为deque。类de原创 2013-11-18 22:09:45 · 1109 阅读 · 0 评论 -
STL中序列容器之list
STL序列容器之list本文介绍序列容器中的list,list容器是通过双向链表实现的。因此,list中的每个元素有一个直接前驱和直接后继(除了第一个和最后一个元素),通过前面的知识我们可知,链表不是一个可以随机访问的数据结构(不像数组),因此,假设我们要访问第5个元素时,我们必须首先遍历前4个元素。 类list的定义,对list的各种操作函数定义的实现包含在头文件list中,因此,在原创 2013-11-19 22:53:50 · 1199 阅读 · 0 评论 -
STL中序列容器之Vector
一、STL组件程序的主要目标是管理数据和产生结果,然而获得这样的目标需要把数据存储到计算机内存中、访问指定的数据,以及写算法来管理数据等能力。例如,若我们要操作的所有数据是同类型的,且知道数据的数目, 那么我们可以使用数组来存储数据。此时,我们可以使用索引来访问数组特定的组件。利用循环和数组索引,我们可以遍历数组元素。算法,像初始化数组,排序,搜索,用来管理数组中存储的数据。原创 2013-11-17 13:38:33 · 1351 阅读 · 0 评论 -
STL中所有容器共有成员函数
一、所有容器的通用成员函数学习所有容器共有的操作。例如,每个容器类有一个缺省的构造器,一些伴有参数的构造器,析构器,插入元素到容器等等。类的定义就是对数据和数据的操作封装成一个单元,因为每个容器都是一个类,所以一个容器中直接定义了一些操作,以及作为类的一部分提供。下表描述了所有容器通用的成员函数,这些函数包含作为类模版的成员来实现容器。假设ct,ct1和ct2是相同类型的容器,原创 2013-11-17 14:55:44 · 1978 阅读 · 0 评论 -
STL中copy算法
STL中通过使用copy函数以提供一种方便的方式来输出容器中的元素。函数copy作为泛型算法的一部分,任何容器类型都可以使用。由于我们需要频繁的初始容器的元素,因此在继续讨论容器之前,先学习一下copy函数的用法。copy函数不只是输出容器的元素。通常,它允许我们复制元素从一个地方到另一个地方。例如输出vector的元素或复制vector的元素到另一个vector,我们可以使用copy原创 2013-11-17 22:02:35 · 2483 阅读 · 0 评论 -
C语言位域的操作
一、 位域的概念有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象转载 2013-04-24 22:30:20 · 1503 阅读 · 0 评论 -
C语言宏定义实现闰年判断并输出指定月的天数
程序如下: #include #define LEAP_YEAR(year, month)\ do{\ if((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))\ {\ printf("%d is Leap!\n", year);\ }\ else\ {\ printf("%d is not原创 2013-03-23 13:32:56 · 3130 阅读 · 0 评论 -
关于C语言中指针运算以及参数入栈顺序的面试题
关于C语言中指针运算以及参数入栈顺序的面试题代码如下:#include int main(){ int b =3; int arr[] = {6, 7, 8, 9, 10}; int *ptr = arr; *(ptr++) += 123; printf("%d, %d\n"m *ptr, *(++ptr)); return 0;}上面的代码输出为:原创 2013-04-05 11:01:55 · 1029 阅读 · 0 评论 -
C语言中memcpy、memset和memmove的实现
1) memcpy():主要实现的是两段内存的复制2) memset():实现对一段内存进行初始化3)memmove():主要是实现一段内存的内容移动到另一段内存。实现的代码如下:#include #include #inclu原创 2011-10-15 00:19:26 · 1635 阅读 · 1 评论 -
局域网中使用的IP地址有哪些?
当我们建设一个局域网的时候,需要为网络中的每台计算机分配一个IP地址。那么都有哪些IP地址可以使用在局域网中呢?局域网中的IP地址有什么规定呢?在局域网中,我们是不能使用如202.106.45.11这样的公网的IP地址的。而是要使用私有IP地址,也就是保留的不会在Inte转载 2011-10-15 23:58:52 · 14354 阅读 · 0 评论 -
int main(int agrc, char **argv)中argc和argv的含义
在int main(int argc, char **argv)中:argc表示命令行参数的个数。argv中存储的是命令行中的数组。以下是一示例:#include #include int main(int argc, char **argv)原创 2011-10-15 23:49:20 · 1929 阅读 · 1 评论 -
深入分析C++中char * 和char []的区别(转载)
问题引入:在实习过程中发现了一个以前一直默认的错误,同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。程序演示:测试环境Devc++代码运行结果2293628 4199056 abc22转载 2011-10-14 23:08:47 · 624 阅读 · 0 评论 -
自己实现基本的C标准库字符串处理函数——基本问题(转载)
字符串是C语言的精华之一,C语言是笔试考题的核心知识点,不管你是学c++,学java还是c#、.net,还是脚本什么的,最好还是懂点C吧,不懂C笔试或许比较吃亏。所以在笔试面试中,字符串的问题是经常出现的,其中有一类问题就是自己实现一些基本的C标准库的字符串处理函数或其他C标准库转载 2011-10-14 23:18:44 · 712 阅读 · 0 评论 -
文件I/O操作
首先明确, 文件I/O API都在头文件中,所以当我们需要使用这些API时,在源代码中包含该文件即可,即:#include 若没有,则会出错。下一步是声明在文件I/O操作中使用的句柄,通常称其为“文件指针”,即:FILE *my_fp;原创 2011-09-19 15:52:13 · 584 阅读 · 0 评论 -
C中常用字符串处理函数
1)字符串输出函数 puts(字符数组名);功能:把字符数组中的字符串输出到显示器。例子:#include void main(){char c[]="hello world\n";puts(c);}2)字符串输入函数原创 2011-09-19 15:44:34 · 1080 阅读 · 0 评论 -
C语言中const的使用
<br />C语言中const的使用:<br />类型声明中const用来修饰一个常量,有如下两种写法,<br />不过不同的写法限定不变的量是不同的,下面将分别举例来说明:<br />1) const在前面<br /> const int nValue //表示nValue值不变。<br /> const char *pContent //表示*pContent不变,也就是指针中值不变,指针地址pContent可变<br /> const (chat*) pCon原创 2011-03-22 20:15:00 · 939 阅读 · 0 评论 -
C语言学习笔记——main(argc,char *agrv[])中参数的说明
<br />在大多数情况下,main()函数都是没有参数的,而实际上,main()是有参数的,<br /> <br />形式如下:<br /> 参数argc表示参数计数,它的值是在命令行(用于执行程序)中参数的数目,参数argv表示参数矢量,它是指向字符的指针数组,这种数组可以被认为是字符串的数组,以下是引自《C语言教程》中的一例:编译通过后,在dos下运行即得结果运行过程:原创 2010-07-09 12:38:00 · 1115 阅读 · 0 评论 -
C语言学习笔记——指针
<br />指针:就是内存中对象的地址,同时数组本身就是一个指针,<br /> <br />因此,数组和指针之间的关系非常的密切,下面的程序将说明这种关系:<br /> <br />例子:<br /> <br />字符串常量中内存中是以字符数组的形式存储的,且最后一个字符是'/0',<br /> <br />原创 2010-07-09 11:12:00 · 668 阅读 · 0 评论 -
一个C程序的内存布局(memory layout)(转)
一个C程序一直以来都是由以下5个段(pieces)组成:代码段(text segment):存放CPU执行的机器指令(machine instructions)。通常情况下,代码段是可共享的,使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份拷贝即可,比如文本编转载 2011-10-08 16:25:15 · 658 阅读 · 0 评论 -
c语言编译过程详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:转载 2011-10-09 10:35:23 · 543 阅读 · 0 评论 -
C++中知识点
C++中知识点1. static在C语言中,有如下作用:1) 在函数体内,static修饰的变量值在函数调用过程中维持不变。2) 在模块内(函数体除外),static修饰的变量(本地全局变量)作用域只在本模块内。3) 在模块内,static修饰的函数,作用域只在本模块内部。在C++语言中,有如下作用:1) 成员变量:静态成员变量(数据成员)——所有对象一份数据原创 2013-03-12 20:30:42 · 1073 阅读 · 0 评论 -
C++语言中类的成员变量初始化
C++语言中类的成员变量初始化C++中对类的成员变量进行初始化的方法通常有如下两种:1.构造函数进行初始化例如:class MyClass{public: MyClass(int nValue) { var = nValue; }private: int var;}2.在构造函数的初始化列表中进行初始化(成员初始化列表)class MyClass{转载 2013-03-11 23:11:12 · 6094 阅读 · 0 评论 -
C语言知识点总结
C语言知识点总结内容来自《C语言深度剖析》1.关键字C语言中有32个关键字,32个关键字如下(需要注意的是:sizeof是关键字,不是函数):关键字意 义auto声明自动变量,缺省时编译器一般默认为autoint声明整型变量double声明双精度变量long声明长整型变量char声明原创 2013-02-20 22:49:04 · 1765 阅读 · 0 评论