C/C++
小昊
小昊,小菜
展开
-
p++ 与 p->next的区别
<br /> 前几天写程序的时候一直没搞明白,若p为指针,那么p++ 与 p->next有什么区别。今天恍然大悟:若p为指向数组的指针,即顺序存储的话,p++就是指向下一个。若p为指向结构的指针,即为链式存储,那么p->next指向下一个结构成员。原创 2011-03-11 16:19:00 · 5605 阅读 · 2 评论 -
希尔排序算法
希尔排序是一种改进的插入排序,又称缩小增量排序希尔排序的基本思想是: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2即所有记录放在同一组中进行原创 2011-10-19 10:44:59 · 440 阅读 · 0 评论 -
C++关于参数为const引用类型的函数调用参数成员函数的一个问题
刚才遇到这么一个问题:class Base{public: Base(int b):a(b){} void getMem() { cout }};void MemFcn(const Base& item){ item.getMem();} 当我把一个Base对象引用传递给Mem原创 2012-03-04 22:53:19 · 1025 阅读 · 1 评论 -
c++ 简单词法分析器的实现
现在在学编译原理,做了个简单的词法分析器。可以自定义关键字、界符以及运算符。 效果如下:有一点不满意的地方是必须输入两次ctrl+z,原来打算的是按下回车就结束输入的还有一点想法是不输入这些设置,而是读取一个配置文件,识别关键字,界符以及运算符代码如下:#include#include#include #include#include#incl原创 2012-03-12 12:56:36 · 4017 阅读 · 0 评论 -
C++中函数指针用法示例
#includeusing namespace std;typedef void(*funcPoint)();//函数指针的定义void baseFunc()//基本函数{ cout }void (*returnPoint())()//函数指针作为返回值{ return baseFunc;}void usePoint(void (*funcP原创 2012-04-05 11:17:59 · 471 阅读 · 0 评论 -
C++中extern关键字与头文件包含问题
在《c++ primer》中有这么一句:要使const能在别的文件中访问,必须指定它为extern还有这么一句:如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义。该const变量应该在一个源文件中定义并初始化,应在头文件中为它添加extern声明,以使其能被多个文件共享于是我构建的代码为:main.h#includeusing namespace原创 2012-04-06 09:47:48 · 2607 阅读 · 0 评论 -
Map以自定义类做为键值
map在STL中的定义 template , class Alloc = alloc> 第一个参数Key是关键字类型第二个参数T是值类型第三个参数Compare是比较函数(仿函数)第四个参数是内存配置对象 map内部存储机制实际是以红黑树为基础,红黑树在插入节点时,必须依照大小比对之后在一个合适的位置上执行插入动作。所以作为关键字,起码必须有“我们知道,int,fl转载 2012-04-08 22:30:17 · 586 阅读 · 0 评论 -
memset给整型数组赋初值
现有一个整型数组a[5],若要是用memset函数给每个元素赋初值1怎么做呢?是memset(a,1,5*sizeof(int))吗? 其实这样是不对的,memset是以字节为单位就是对array指向的内存的4个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是000000010000000100000001原创 2011-11-04 16:23:33 · 7147 阅读 · 0 评论 -
好欢喜的C语言问题
今天在做一个习题的时候遇到这么个情况: #define MAX 50+1 //题目需要,加1 int str[MAX]; memset(str,0,MAX * sizeof(int));//老是不能全部清零 memset(str,0,sizeof(str));//这个却可以 我疑惑了半天,又查看了memset函数的相关文章原创 2012-05-12 17:12:05 · 534 阅读 · 0 评论 -
冒泡排序算法
冒泡排序的基本思想是依次比较相邻的两个数,将小数放在前面,大数放在后面。至第一次比较结束,则最大的数在数组最后。第二趟时,仍从第一对数开始比较,将小数放前,大数放后,一直比较到倒数第二个数,第二趟结束,次大的数放在了数组次后的位置重复下去,直到不再进行冒泡排序,即数组已为原创 2011-10-19 10:43:50 · 316 阅读 · 0 评论 -
scanf读输入缓存引发的问题
在一个程序中发现了这个问题#includeint main() { char a[4]; while(scanf(" %c%c%c%c\n",&a[0],&a[1],&a[2],&a[3]) == 4) { printf("%c%c%原创 2011-10-10 07:21:02 · 745 阅读 · 0 评论 -
有趣的C语言
#includeint main(){ int b,c,a = 1; b = (a += 3) + (a *= 2); c = (a *= 2) + (a += 3); printf("%d %d/n",b,c); return 0;}天知道怎么搞的……由于“()”的参与改变了优先级而先执行了两个赋值操作符,然后两个赋值操作符都返回a的地址,然后计算“+”的值,分别计算两边的数字——a的地址,也就是已经执行过两次赋值操作的a的值。赋值操作符返回的数字不是变量的值,而是变量对应的原创 2011-03-31 16:55:00 · 617 阅读 · 0 评论 -
C语言基础IO操作
#includeint main() { FILE *from,*to; char ch; from = fopen("from.txt","r"); to = fopen("to.txt","w");原创 2011-09-19 19:55:39 · 9779 阅读 · 0 评论 -
memset快速初始化数组
int a[100];快速初始化数组元素全部为0memset(a,0,100 *sizeof(int));原创 2011-09-19 19:56:45 · 818 阅读 · 0 评论 -
直接插入排序算法
直接插入排序的思想是将一个数据插入到有序数据中,从而得到一个新的,个数加一的有序数组。插入算法要把排序的数组分成两部分,第一部分包含了这个数组的所有元素,但排除第一个元素。而第二部分就只包含这个元素。排序时从第一部分中按顺序取一个元素,插入到第二部分中,直至取完第原创 2011-10-14 07:15:50 · 295 阅读 · 0 评论 -
直接选择排序算法
选择排序的思想是从未排序的数组中找到最小的元素,放在已排序的数组的最后直接排序的思想是n个元素经过n-1趟直接排序得到有序结果1.有序数组为空,无序数组为初始数组2.第1趟排序在无序数组中找到最小的元素,与无序数组中的第1个元素交换,使无序数组元素减少1,原创 2011-10-14 07:02:29 · 821 阅读 · 0 评论 -
快速排序算法
快速排序是一种比较快的排序,也是一种很经典的排序,诞生于1962年它的采用分治法,分治法基本思想是将原问题分解为比原问题更小但是跟原问题结构相似的子问题,递归的解决这些子问题,则原问题就迎刃而解快速排序的思想是1. 分解 在数组中选择一个作为基准(pivot原创 2011-10-08 10:45:27 · 304 阅读 · 0 评论 -
汉诺塔 我的理解
汉诺塔的C语言实现:A:初始柱 B:辅助柱 C:目标柱void hanoi(int n,char A, char B, char C) {//若A上只有一个盘,则将该盘转移到C if( n == 1 ) { printf("Move原创 2011-10-07 10:21:07 · 1142 阅读 · 0 评论 -
归并排序算法
归并排序比较简单易懂,是将两个或者两个以上的有序表合并为一个新的有序表,即把待排序的数组分为若干个子序列,每个子序列是有序的,然后把有序子序列合并为有序序列工作原理为:申请空间,使其大小为两个已排序序列大小之和,用来存放合并后的序列设定两个指针,分别指向两个以排序原创 2011-10-09 07:56:09 · 378 阅读 · 0 评论 -
limits.h的使用
要判断某种特定类型可以容纳的最大值或最小值,一种简便的方法是使用ANSI标准头文件limits.h中的预定义值。该文件包含一些很有用的常量,它们定义了各种类型所能容纳的值,下表列出了这些常量: ---------------------------------------------------------------- 常 量 描 述 ---------原创 2012-05-14 22:44:22 · 1365 阅读 · 0 评论