
C/C++
文章平均质量分 60
lwoyvye
这个作者很懒,什么都没留下…
展开
-
谈一谈getchar()、EOF和Ctrl+D
getchar() getchar从stdio流中读字符,getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的原创 2015-07-10 16:31:37 · 7127 阅读 · 0 评论 -
c 程序必须要从main函数开始执行么?
这是在面试中被问到的一个问题,回答了是。这问题第一感觉答案就是否定的,一时也没想出来理由只能回答了是。当时太紧张了,其实回想一下汇编语言就该想到程序的入口地址是可以指定的,c语言编译器默认以main作为入口地址。网上查阅后,发现了 __attribute__ 这个关键字,它可以设置函数属性,变量属性,类型属性。参考:http://www.cnblogs.com/Anker/p/3462363.htm原创 2016-03-25 14:23:32 · 9847 阅读 · 0 评论 -
C++为什么要引入静态成员函数
在静态成员函数出来之前就已经有了静态成员变量。静态成员变量是为了为用户提供在类级别上访问,而不是类对象有关的数据。静态成员变量在编译期就存在了,而不像非静态成员变量只有实例化了对象才会给分配内存。静态成员变量是所有类对象共享的,例如,我们可以为类定义一个 static int n 来统计实例化了多少个对象,对象构造时 n++ , 析构时 n– 。但是,如果为类定义的静态成员变量是私有的(不希原创 2016-03-14 14:39:59 · 3043 阅读 · 1 评论 -
c++对象模型
参阅: http://blog.youkuaiyun.com/ljianhui/article/details/46408645环境:ubuntu15.04 、 gcc编译器做个简单的笔记: 类内只保存非静态数据成员变量和虚函数表指针,虚函数表中按声明顺序依次保存所有的虚函数指针。其他的静态成员和静态成员函数、非静态成员函数在类外保存。注:vptr 表示指向虚函数表的指针单独的类多继承布局:原创 2016-03-14 08:46:59 · 774 阅读 · 0 评论 -
64位系统下进程的内存布局
环境操作系统:ubuntu15.04物理内存:4G测试程序#include<stdio.h>#include<stdlib.h>int a;int b=1;main(){ int n = 0; char *p1 = NULL; char *p2 = NULL; const int s = 10; p1 = (char*)malloc(200原创 2015-12-01 23:59:30 · 8680 阅读 · 0 评论 -
C++的一些笔记
发现一些小的知识点长期不用都得忘,决定再次遇到了一定要记录一下。const 成员函数const对象只能调用const成员函数。const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误在const函数中调用非const成员函数是语法错误 任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它原创 2016-01-28 19:42:54 · 816 阅读 · 0 评论 -
C语言一些少见但很有用的语法
在阅读一些项目的源代码时,遇到了一些我平时很少见,但发现很有用的C语言语法,在此整理一下。#undef我们平时用的都是#define,突然遇到了这个。。。其实,#undef 与 #define 相对应。#undef 的作用是取消已经有的宏定义。#include<stdio.h>#define MAX 5int main(){#undef MAX// printf("%d\n原创 2016-01-27 23:23:52 · 1078 阅读 · 0 评论 -
测试栈空间的大小
比如局部变量是保存在栈空间中的,今天突然在想栈的上限是多大呢,什么时候才会栈溢出?ulimit 命令linux下使用ulimit 命令可以查看系统的很多上限值。ulimit -a 查看所有ulimit -s 查看栈空间的大小可以看到系统设置栈的上限是8M测试现在我们写个程序测试一下两种方法:1、第一种方法:最简单的是在函数或直接在main()函数里定义多个局部变量。局部变量一定要初始化,原创 2015-11-30 17:22:11 · 11421 阅读 · 0 评论 -
64位系统下gcc按照32位编译c程序
有时候我们需要测试c代码在32位环境下的运行结果,这时候就需要gcc按照32位来编译c了。1、 安装sudo apt-get install lib32readline-gplv2-dev2、编译。加 -m32 参数gcc -m32 hello.c原创 2015-11-30 15:59:07 · 7234 阅读 · 1 评论 -
从汇编语言的角度看清数组名和指针变量的区别
当初学c语言总感觉数组名和指针之间有种说不清道不明的关系,两者很像,但是又有着解释不清的区别。数组名和指针的区别用常量初始化字符数组和指针变量原创 2015-11-27 14:30:18 · 3330 阅读 · 0 评论 -
重载输入输出运算符
原文链接:http://blog.youkuaiyun.com/lyh__521/article/details/49601489重载输入输出运算符 我们平时可以用流 std::cout<<str<<n ; std::cin>>str>>n ; 输出、输入字符串和整型等内置类型的值。但是对于我们自定义的类,比如 Student 类,却不能直接通过 cout<<Student 或 cin>>Student 这原创 2015-11-03 01:15:49 · 19999 阅读 · 1 评论 -
C++重载运算符函数需知
原文链接:http://blog.youkuaiyun.com/lyh__521/article/details/49592975基本概念 重载的运算符是具有特殊名字的函数: (1) 名字由关键字 operator 和其后要定义的运算符号(+、-、/、* 等组成); (2) 和其他的函数一样,也包含返回类型、参数列表以及函数体。对于二元运算符来说,左侧运算对象传递给第一个参数,而右侧运算符传递给原创 2015-11-02 22:13:46 · 1317 阅读 · 0 评论 -
free 引发的思考
原文链接:http://blog.youkuaiyun.com/lyh__521/article/details/49539011先看两个例子:(1)#include<string.h>#include<stdio.h>#include<stdlib.h>int main(){ char *p; char *q; p = (char*)malloc(20); // 给p开辟原创 2015-11-01 00:01:19 · 959 阅读 · 0 评论 -
C++重载复合赋值运算符、算术运算符和关系运算符
原文链接:http://blog.youkuaiyun.com/lyh__521/article/details/49622601复合赋值运算符 形如‘*=’、‘+=’、‘/=’等这样的运算符称为复合赋值运算符,它们其实是算术运算和赋值运算的结合,即先执行算术运算,得到的值再赋值给左侧对象。重载复合赋值运算符:赋值运算符必须定义为类的成员,复合赋值运算符通常也应该定义为成员函数(但并不是必须这样)。复合赋原创 2015-11-03 21:35:54 · 7755 阅读 · 0 评论 -
linux下使用C++ Json库
1、下载JsonCpp http://sourceforge.net/projects/jsoncpp/files/ 2、下载scons http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download3、解压scons-2.1.0.tar.gz tar -zvxf scons-2.1.0原创 2015-08-04 15:21:11 · 5715 阅读 · 0 评论 -
关于头文件重复包含以及函数重定义问题
转载:http://blog.chinaunix.net/uid-23634108-id-2393493.html调试的问题出现这个问题还蛮奇怪的,a.h需包含statistic.h, main.c需包含a.h和statistic.h,导致了statistic.h重复包含,hsdm_queue_ctr重复定义。 关于重复包含和重复定义的问题,可根据下面的分析得到认识。转载 2015-08-06 00:09:24 · 4075 阅读 · 0 评论 -
C++智能指针
转载自:http://blog.youkuaiyun.com/xt_xiaotian/article/details/5714477转载 2015-06-19 12:05:27 · 676 阅读 · 0 评论 -
追踪系统调用流程
前言 我不是专业的内核研读者,只因自己的好奇心,想一探(IO多路复用)select系统调用的实现原理,于是一路追踪到其内核的底层调用。特此记录这一段学习过程。本机系统:ubuntu15.04 内核版本:3.19.0-29-genericsys_select 哪去了? 当用户态使用系统调用的时候,操作系统会根据该函数的系统调用号找到其对应的底层函数(前缀 sys_ )去执行。比如当用户调用下原创 2015-12-16 20:47:02 · 1368 阅读 · 0 评论