07 2011 档案

经典抽象数据类型 堆栈(笔记)
摘要:获取内存来存储值有三种方案:静态数组,动态分配的数组、动态分配的链式结构。用静态数组实现堆栈:#include "stack.h"#include <assert.h>#define STACK_SIZE 100static STACK_TYPE stack[STACK_SIZE];static int top_element = -1;void push (STACK_TYPE value){ assert(!is_full()); top_element += 1; stack[top_element] = value;}void pop(void){ as 阅读全文

posted @ 2011-07-26 16:27 dusts 阅读(424) 评论(0) 推荐(0)

字符串常量
摘要:当一个字符串常量出现于表达式中时,它的值是个指针常量。编译器把这些指定的字符copy存储在内存的某个位置,并存储一个指向第一个字符的指针。"xyz"+1表示指针值加上1,结果是个指针,指向字符串的第二个字符:y#include<stdio.h>int main(){int value = 11;putchar("0123456789ABCDEF"[value%16]);return 0;}输出结果为B。用类似此法可以方便的将十进制转换为16进制。 阅读全文

posted @ 2011-07-25 16:51 dusts 阅读(177) 评论(0) 推荐(0)

函数指针
摘要:函数指针最常见的用途:转换表 和 作为参数传递给另一个函数。简单声明一个函数指针后,在对函数指针执行间接访问前必须把它初始化为指向某个函数。int f(int);int (*pf)(int) = &f;//&可有可无,因为函数名被使用时总是被编译器转换成函数指针。-----三种方式调用函数:int ans;ans =f(25);//函数名f会首先被转换成一个函数指针,该指针指定函数在内存在的位置,然后函数调用操作符调用该函数执行开始于这个地址的代码;ans = (*pf)(25);//把函数指针转换成一个函数名,这个转换并不是真正需要的,因为编译器在执行函数调用操作符之前又会把 阅读全文

posted @ 2011-07-25 14:21 dusts 阅读(253) 评论(0) 推荐(1)

常见的动态内存分配错误
摘要:在使用动态分配的内存时,常出现的错误为:对null指针进行解引用操作(*),对分配的内存进行操作时越过边界,释放并非动态分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存被释放之后被继续使用。传递给free的指针必须是从malloc、calloc、realloc函数返回的指针,传给free函数一个指针,让它释放一块并非动态分配的内存可能导致程序立即终止或在晚些时候终止。试图释放一块动态分配的内存的一部分也可能引起类似问题。例如pi = malloc(10 * sizeof(int));free(pi + 5);//释放后五个这样企图释放内存的一部分是不容许的,必须整块一起释放。但r 阅读全文

posted @ 2011-07-22 13:05 dusts 阅读(1061) 评论(0) 推荐(0)

如何从深层嵌套的循环中迅速跳出
摘要:因为break一次只能跳出一层循环,所以如果想从多层嵌套中迅速跳出有以下方法:1、goto语句while(condition1){ while(condition2) { while(condition3) if(some disaster) goto quit; }}quit: ;2、设置一个状态标志:enum {EXIT ,OK}status;...status = OK;while(status == OK && condition1){ while(status == OK && condition2){ while(status == OK & 阅读全文

posted @ 2011-07-12 10:05 dusts 阅读(1213) 评论(0) 推荐(1)

const 关键字 笔记
摘要:const修饰的值并不是常量,而是只读的变量。其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。C++ 里 const 变量一般默认 static 连接方式也就是其它 .cpp 文件看不到,所以用 extern 声明也没用可将 const 变量的声明放在 .h 文件里,需要使用此常量的 .cpp 都 #include 它编译器通常不为普通const只读变量分配存储空间,而是将它们保存在符号表中,这使得Tam它成为一个编译期间的值,没有了存储和读内存的操作,使它的效率很高。#define M 3 //宏常量const int N = 5; //此时未将N 放入内存......int 阅读全文

posted @ 2011-07-11 16:19 dusts 阅读(584) 评论(0) 推荐(0)

C语言 命令行参数
摘要:在支持C语言的环境中,可以在程序开始执行时将命令行参数传递给程序。调用主函数main时,有两个参数,第一个参数表示运行程序时命令行中参数的数目;第二个参数表示指向字符串数组的指针,其中每个字符串对应一个参数。main(int argc, char *argv[])argc和argv是习惯性用法,可以更改。argv是一个指向指针的指针,这个数组的每个元素都是一个字符指针,指向的第一个参数就是程序的名称,最后一个是NULL。#include <stdio.h>int main(int argc, char *argv[]){int i;for(i = 1; i < argc; i 阅读全文

posted @ 2011-07-05 15:18 dusts 阅读(4652) 评论(0) 推荐(1)

指针与数组 (笔记)
摘要:字符数组初始化的一种方法:char str[] = {"I am happy!"};也可以省略花括号{}char str[] = "I am happy!";只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句讲一个字符串常量或者字符数组直接复制为一个字符数组:str1 = “china”;//错误str1 = str2;//错误strcpy(str1, str2);strcpy(str1, "china");以上是用字符数组存放字符串,另外, C++ 定义了一种新的数据类型——字符串类型(string)要 阅读全文

posted @ 2011-07-05 11:35 dusts 阅读(269) 评论(0) 推荐(0)

导航