一 、指针存在的意义
参考 http://www.cnblogs.com/ggjucheng/archive/2011/12/13/2286391.html
1.指针
指针是一个变量,该变量用于存储内存里的某个地址。指针的关键因素有四:指针的类型,指针指向的类型,指针的内容(指针所指向的内容),
指针所占用的内存区。
(1).指针的类型
char* ptr; //char*
int** ptr; //int**
int (*ptr)[3]; //int (*)[3]
int *(*ptr)[3]; //int *(*)[3]
把变量的名字去掉就是指针的类型
(2).指针所指向的类型
char* ptr; //指向char型
int** ptr; //指向int*型
int (*ptr)[3]; //int ()[]型
int *(*ptr)[3]; //int *()[3]
(3).指针的内容(指针的值)
指针的值是一个数值,该数值存放的不同于一般的整型数值,被编译器识别为一个地址。地址的长度和机器最大可寻址位数有关,32位的机器地址的长度就是
32位。&与* ,&是取地址运算符:
int a=10;&a的运算结果是一个地址也就是指针,是指针则会有类型,指针类型为int *,指针指向的类型为 int,指针的内容存放的是a的地址,指针所占
的内存区是以a的首地址开始连续4字节空间。
(4).指针所占的内存区
指针所指向的内存区是以指针的值所代表的地址的开始,长度为sizeof(指针所指向的类型的)的一片内存区。
二、指针的用途及区别
(1).指针和数组
char str[3];//字符数组名str可以看作一个指针变量,指针的类型为 char*,指向的类型为char
char *str[3];//是一个三单元的数组,但每个数组里存放的变量类型是char*型指针(可以当作字符串使用)。
数组名有两种含义:一是代表数组本身;另外也可以表示为指针。
(2).函数指针和指针函数