C/C++
小烟
昔我往矣,杨柳依依;今我来思,雨雪霏霏....
展开
-
C语言的输入输出
单个字符 用 单引号括起来 多个字符 用 双引号括起来 C语言所有的字符串 只要是双引号 后面都有个\0 就算双引号里面有一个字符串 那也相当于 一个字符串和一个\0 所以 char 类型 要用单引号 表示 单引号只能括单个字符 双引号 只能扩多个字符变量不能重复定义 下面是错误的char i = 'a';char i = 'b';这样写是对的原创 2013-01-17 15:11:41 · 845 阅读 · 0 评论 -
volatile 和 sig_atomic_t
1).volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,每次使用时都需要去内存里重新读取它的值,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10;转载 2016-01-19 22:49:44 · 590 阅读 · 0 评论 -
linux下C 信号集处理函数
sigset_t 为信号集 可 sizeof(sigset_t) 查看 128Kint sigemptyset(sigset_t * set)清空设置int sigfillset(sigset_t * set)置满信号集int sigaddset(sigset_t *set, int signo原创 2016-01-19 22:53:10 · 1093 阅读 · 0 评论 -
总线错误和段错误问题的定位
对现在的很多初级的程序原来说如果遇到总线错误(bus error)或者段错误(segementation fault/ core dump)是一件非常折磨人的事,让人一时间找不到什么好的方法也不知从何处下手去解决这个问题;和许多人一样,我很快也遇到了这样的问题: 出现这个错误时,错误信息对引起这种事件的的错误的源代码并没有做简单或者详细的解释;知识简单的显示error:seg转载 2015-12-23 22:59:15 · 1125 阅读 · 0 评论 -
mmap:是什么 为什么 怎么用
mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可转载 2015-12-23 23:06:07 · 1600 阅读 · 0 评论 -
进程信号的未决状态(pending status)
这两天看了apue有关进程信号的部分,觉得未决状态这个词很是不一般,呵呵。一开始当我看到这个词,我不理解,什么意思呢,读了好几遍。不知道是书里面讲的晦涩难懂,还是脑子越来越不行了,就是没有搞明白。后来看到后面的例子,然后再回想一下,终于清楚了!下面记录一下吧。定义:信号产生和传递之间的时间间隔内,称此信号是未决的;简单的说就是:一个已经产生的信号,但是还没有传递给任何进程,此时该信转载 2015-12-24 22:56:15 · 7924 阅读 · 0 评论 -
pthread_cleanup_push与pthread_cleanup_pop的目的 作用
首先你必须知道pthread_cleanup_push与pthread_cleanup_pop的目的(作用)是什么。比如thread1:执行pthread_mutex_lock(&mutex);//一些会阻塞程序运行的调用,比如套接字的accept,等待客户连接sock = accept(......); //这里是随便找的一个可以阻塞的接口转载 2016-02-12 17:47:36 · 556 阅读 · 0 评论 -
线程同步 - 互斥量
一、什么是互斥量互斥量是另一种用于多线程中的同步访问方法,它允许程序锁住某个对象,使得每次只能有一个线程访问它。为了控制对关键代码的访问,必须在进入这段代码之前锁住一个互斥量,然后在完成操作之后解锁。二、互斥量的函数的使用它们的定义与使用信号量的函数非常相似,它们的定义如下:#include int pthread_mutex_init(pthr转载 2016-02-12 17:49:55 · 720 阅读 · 0 评论 -
客户端 用不用 bind 的区别
无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的端口来使用。 Bind()函数在成功被调用时返回0;出现错误时返回"-1"并将errno置为相应的错误号。需要注意的是,在调用bind函数时一般不要将端口号置为小于1024的值,因为1到1024转载 2016-04-01 20:14:46 · 636 阅读 · 0 评论 -
常量字符串为什么位于静态存储区?
常量字符串为什么位于静态存储区?char *c="zhaobei";书上说: "zhaobei"这个字符串被当作常量而且被放置在此程序的内存静态区。那一般的int i=1;1也是常量,为什么1就不被放置在此程序的内存静态区了呢?请高手指点!所有的字符窜常量都被放在静态内存区因为字符串常量很少需要修改,放在静态内存区会提高效率例:cha转载 2016-05-12 22:55:07 · 3051 阅读 · 0 评论 -
C语言中关键字auto、static、register、const、volatile、extern的作用
这些关键词都是c++基础知识,我整理了一下,希望对新学的朋友们有用:(1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。(2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通转载 2016-05-14 21:29:59 · 739 阅读 · 0 评论 -
linux c学习笔记----进程创建(fork,wait,waitpid)
1.pid_t fork();(1)当一个进程调用了fork 以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID 和父进程ID,其他的都是一样.就象符进程克隆(clone)自己一样.(2)为了区分父进程和子进程,我们必须跟踪fork 的返回值. 当fork 掉用失败的时候(内存不足或者是用户的最大进程数已到)fork 返回-1,否则fork 的返回值有重要的作转载 2015-11-28 21:32:25 · 1415 阅读 · 0 评论 -
C++ 类操作符重载笔记
不能改变操作符优先级不能改变操作符的结合性不能改变操作符所需要的操作数不能创建新的操作符对于二元操作符重载,如果操作符左边是类 那么就在该类内部成员函数重载操作符即可如果操作符左边不是类,而是一个常量,那么就必须在类的外部定义一个操作符重载函数有一个最基本条件 一定有一个一元是一个自定义的C++类如果两个都是基本数据类型那么是非法的原创 2015-09-13 13:51:18 · 604 阅读 · 1 评论 -
求两个排序数组的交集
注:此题来源于CSDN论坛,解法也是来源于论坛上的讨论,非原创,特此声明题目: 有两个数组a{1,5,8,10,14,15,17,18,20,22,24,25,28}和b{2,4,6,8,10,12},如何求出他们之间的交集?要求效率越高越好,数组都是从小到大排序好的。 此题解法的详细说明可以参考侯捷的《STL源码剖析》书中第333页。此解法与论坛上说给出的原创 2015-01-08 20:10:32 · 1040 阅读 · 0 评论 -
const与#define宏定义的区别——C语言深度剖析
define是单纯的文字替换,比如 define pi 3.14 ,仅仅是把3.14用pi来代替了。主要是便于修改,如果程序中有多个pi值,我要换成3.1415,那么只要把宏定义修改成define pi 3.1415即可 const 定义的是不可变的变量。虽然不可变,但它不是常量。而宏定义define定义的是常量,有具体的值。 DEFINE定义的不要求类型 CONST必须指原创 2015-03-28 21:27:40 · 680 阅读 · 0 评论 -
C语言一个栈的实现
栈是常用的数据结构之一,下面给出一个链式栈的实现~~头文件Stack.h[cpp] view plaincopy#ifndef Stack_H #define Stack_H typedef int Item; typedef struct node * PNode; /*定义栈节点类型*/转载 2015-06-19 21:49:20 · 3572 阅读 · 0 评论 -
C语言一个队列的实现
队列也是常用的数据结构之一,下面给出一个链式队列的实现~~头文件Queue.h[cpp] view plaincopy#ifndef Queue_H #define Queue_H typedef int Item; typedef struct node * PNode; typedef struct nod转载 2015-06-20 09:49:21 · 595 阅读 · 0 评论 -
C语言单链表的实现
[cpp] view plaincopy#ifndef List_H #define List_H typedef int Item;/*定义数据项类型*/ typedef struct node * PNode;/*定义节点指针*/ typedef struct node/*节点的定义*/ { Item item转载 2015-06-20 18:16:50 · 854 阅读 · 0 评论 -
C语言一个双向链表的实现
首先编写头文件,头文件里做相关的定义和声明,DList.h内容如下:[cpp] view plaincopy#ifndef DList_H #define DList_H typedef int Item; typedef struct Node * PNode; typedef PNode Position; /*定转载 2015-06-20 18:17:36 · 500 阅读 · 0 评论 -
C语言中fgetc()函数的返回值意义
C语言fgetc()函数的返回值意义学习C语言的,文件操作,大都会用到它。它的函数原型:int fgetc( FILE* stream );这个函数的返回值,是返回读取的一个字节。如果读到文件末尾返回EOF。EOF其实就是一个宏#define EOF (-1)表示-1.既然返回的是一个字节,为什么返回值确用4字转载 2015-06-20 22:13:44 · 1891 阅读 · 0 评论 -
C语言中main函数的参数
我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针转载 2015-07-02 13:55:24 · 705 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方转载 2015-06-14 18:38:03 · 433 阅读 · 0 评论 -
内存对齐详解
内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址)、访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 。 为什么需要内存对齐?对齐有什么好处?是我们程序员来手动做内存对齐呢?还是编译器在进行自动优化的时候完成这项工作? 在现代计算机体系中,每次读写内存中数据,都是按字(word,4个字节转载 2015-06-14 18:34:58 · 486 阅读 · 0 评论 -
为什么计算机最小的存储单位是字节?而最小到的传输单位是bit?
数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。还可以从以下几个方面来理解:1.字节(Byte)是电脑中表示信息含义的最小单位,因为在通常情况下一个ACSII码就是一个字节的空间来存放。而事实上电脑中还有比字节更小的单位转载 2016-05-15 23:09:44 · 38209 阅读 · 1 评论