博文

深入理解C语言指针的奥秘( 转)(2007-03-13 15:45:00)

摘要:              指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。   先声明几个指针放着做例子:   例一:   (1)int*ptr;   (2)char*ptr;   (3)int**ptr;   (4)int(*ptr)[3];   (5)int*(*ptr)[4];     指针的类型  从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:   (1)int*ptr;//指针的类型是int*   (2)char*ptr;//指针的类型是char*   (3)int**ptr;//指针的类型是int**   (4)int(*ptr)[3];//指针的类型是int(*)[3]   (5)int*(*ptr)[4];//指针的类型是int*(*)[4]   怎么样?找出指针的类型的方法是不是很简单?   指针所指向的类型  当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。   从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:   (1)int*ptr;//指针所指向的类型是int   (2)char*ptr;//指针所指向的的类型是char   (3)int**ptr;//指针所指向的的类型是int*   (4)int(*ptr)[3];//指针所指向的的类型是int()[3]   (5)int*(*ptr)[4];//指针所指向的的类型是int*()[4]   在指针的算术运算中,指针所指向的类型有很大的作用。   指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指......

阅读全文(2480) | 评论:0

C++学习基础知识(转)(2007-03-13 15:39:00)

摘要:一、#include “filename.h”和#include 的区别 #include “filename.h”是指编译器将从当前工作目录上开始查找此文件 #include 是指编译器将从标准库目录中开始查找此文件   二、头文件的作用 加强安全检测 通过头文件可能方便地调用库功能,而不必关心其实现方式   三、* , &修饰符的位置 对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名   四、if语句 不要将布尔变量与任何值进行比较,那会很容易出错的。 整形变量必须要有类型相同的值进行比较 浮点变量最好少比点,就算要比也要有值进行限制 指针变量要和NULL进行比较,不要和布尔型和整形比较   五、const和#define的比较 const有数据类型,#define没有数据类型 个别编译器中const可以进行调试,#define不可以进行调试 在类中定义常量有两种方式 1、 在类在声明常量,但不赋值,在构造函数初始化表中进行赋值; 2、 用枚举代替const常量。   六、C++函数中值的传递方式 有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference) void fun(char c) //pass by value void fun(char *str) //pass by pointer void fun(char &str) //pass by reference 如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构 函数的类型不能省略,就算没有也要加个void   七、函数体中的指针或引用常量不能被返回 Char *func(void) { char str[]=”Hello Word”; //这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉 return str; } 函数体内的指针变量并不会随着函数的消亡而自动释放   八、一个内存拷贝函数的实现体 void *memcpy(void *pvTo,const void ......

阅读全文(2369) | 评论:0