09 2013 档案

摘要:1,malloc返回的void *类型指针不可做更改#include #include int main(void) { int *p=malloc(20); p++; //p已经变化过,因此是 无效的释放 free(p); return 0; }结果:报错*** Error in `./a.out': free(): invalid pointer: 0x0156000c *** Aborted (core dumped) 2,free双重释放#include #include //双重释放,p的值不变,... 阅读全文
posted @ 2013-09-05 17:19 泛起的鱼 阅读(1772) 评论(0) 推荐(0)
摘要:1,使用6级指针访问一个整数,使用隐式内存分配中转#include #include //构建六级指针访问一个整数 //使用隐式内存分配中转 //这个程序只是做人工分配内存的目的 int main(void) { int ******p=NULL; int a=16; p=malloc(sizeof(int *****));//同下 *p=malloc(sizeof(int ****));//同下 **p=malloc(sizeof(int ***));//同下 ***p=malloc(size... 阅读全文
posted @ 2013-09-05 16:01 泛起的鱼 阅读(428) 评论(0) 推荐(0)
摘要:1,二级指针定义#include { //int** p; //p2是二级指针,是一个变量, //p2本身是int **类型 //p2 指向 int * 类型 int **p2=NULL; int *p1=NUL; int a=8; p1=&a; p2=&p1;// p2 --------》*p2 ----------》 **p2// int** int * int printf(“a=%d, **p2=%d\n”,a,**p2); ... 阅读全文
posted @ 2013-09-05 14:27 泛起的鱼 阅读(1231) 评论(0) 推荐(0)
摘要:堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后由系统释放。4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放5、程序代码区— 阅读全文
posted @ 2013-09-05 11:28 泛起的鱼 阅读(7487) 评论(0) 推荐(1)
摘要:C++/ANSI C:void*指针只支持几种有限的操作:与另一个指针进行比较;向函数传递void指针或从函数返回void*指针;给另一个void*指针赋值。不允许使用void*指针操作它所指向的对象,例如,不允许对void*指针进行解引用。不允许对void*指针进行算术操作。GNU C:GNU C指定void*指针的算术操作与char*一致。void*表示“任意类型的指针”,主要运用于内存操作函数的形参类型和返回值类型(内存操作与内存中数据类型无关,即任意类型都可以)。memcpy 原型:extern void *memcpy(void *dest, void *src, unsigned. 阅读全文
posted @ 2013-09-05 10:24 泛起的鱼 阅读(837) 评论(0) 推荐(0)
摘要:1,指针的基本用法1#include // 指针和数组都是复合类型, 他们从基本类型// 或者自定义类型派生.int main(void){ // 当定义指针变量p 时, int * --> 这里的 * // 不是运算符, 而是 类型定义说明符. // 定义了一个变量p // p 是 int * 类型. p 指向 int 类型. int *p = NULL; int a = 8; // 此时, p 指向 a p = &a; printf("sizeof p = %u\n", sizeof(p)); printf("&p = %p, ... 阅读全文
posted @ 2013-09-04 17:09 泛起的鱼 阅读(641) 评论(0) 推荐(0)
摘要:1,格式控制符“%p”中的p是pointer(指针)的缩写。指针的值是语言实现(编译程序)相关的,但几乎所有实现中,指针的值都是一个表示地址空间中某个存储器单元的整数。printf函数族中对于%p一般以十六进制整数方式输出指针的值,附加前缀0x。2,这里的"c=%#x\n"意思是:是一个格式控制符,其中c=是普通字符,%#x是格式说明,\n是转义字符;其中的%#表示的输出提示方式,如果是8进制,在前面加0,如果是十进制,不加任何字符,如果是十六进制,会加上0x当执行:printf("c=%#o\n",c);输出的是:0101(把16进制41转化为2进制) 阅读全文
posted @ 2013-09-04 16:55 泛起的鱼 阅读(3939) 评论(0) 推荐(0)
摘要:int me;const int * p1=&me;//p1可变,*p1不可变,此时不能用*p1来修改,但是p1可以转向int * const p2=&me;//p2不可变,*p2可变,此时允许*p2来修改其值,但是p2不能转向。const int *const p3=&me;//p3不可变,*p3也不可变,此时既不能用*p3来修改其值,也不能转向 阅读全文
posted @ 2013-09-04 16:21 泛起的鱼 阅读(151) 评论(0) 推荐(0)
摘要:1,字符加法#include #include void reverse(char s[]) //反向遍历{ int i; int len = strlen(s); for (i = 0; i len2 ? len1 : len2;//选取最大的作为循环长度 reverse(s1);//切换高位和地位的位置 reverse(s2);//切换高位和地位的位置 int i; int digit, carry;//digit是存储当前位数相加的值 for (i = 0, digit = 0; i int my_strlen(char s[]){ ... 阅读全文
posted @ 2013-09-04 15:36 泛起的鱼 阅读(687) 评论(0) 推荐(0)
摘要:1,数组定义#include int main(void){ // 定义数组时需要确定: // 1. 数组元素的类型. // 2. 显式/隐式确定数组元素个数. int a[6] = { 12, 25, 36, 8, 45, 66 }; // 隐式确定数组元素个数 int b[] = { 3, 4, 5, 18, 23, 99}; // C99 // 在具有初始化式时, 数组中剩下的元素被初始化为 0 int c[] = { [0] = 36, [4] = 82 }; int i; for (i = 0; i int main(... 阅读全文
posted @ 2013-09-04 13:39 泛起的鱼 阅读(681) 评论(0) 推荐(0)
摘要:1.。。。。。。。。。。。。。。。。。。。。#include void hanoi(char from, char pass, char to, unsigned n){ if (n == 1) { printf("%c ==> %c\n", from, to); } else { hanoi(from, to, pass, n - 1); hanoi(from, pass, to, 1); hanoi(pass, from, to, n - 1); }}void hanoi1(char... 阅读全文
posted @ 2013-09-01 19:20 泛起的鱼 阅读(230) 评论(0) 推荐(0)